2017-12-08 8 views
0

Ausgabe: Ich habe ein Verfahren (vereinfacht), von .NET-Anwendung erstellt:Temp Verfahren vermasselt Sortierungs

create procedure #SaveData 
@InValue varchar(128) 
as 
begin 
    insert into Production.TargetTable (PREFIX_Value) select @InValue 
end 

Problem ist, die Datenbank verwendet SQL_SLOVAK_CP1250_CI_AS Sortierung. TempDB verwendet Standard SQL_Latin1_General_CP1_CI_AS Kollation.

Problem vereinfacht:

-- this doesnt work, returns RTC 
create procedure #SaveData 
@InValue varchar(128) 
as 
begin 
    select @InValue 
end 

-- this doesnt work, returns RTC 
create procedure #SaveData 
@InValue varchar(128) 
as 
begin 
    select @InValue collate SQL_SLOVAK_CP1250_CI_AS 
end 

-- this does work, returns ŘŤČ 
create procedure SaveData 
@InValue varchar(128) 
as 
begin 
    select @InValue 
end 

Welche, dass statt für anstelle von Testzeichenfolge verursacht rtC, RTC gespeichert wird. Wenn ich die # aus dem Namen der Prozedur entfernen und nicht als temporäre Prozedur erstellen, funktioniert alles.

Jetzt, ein Update gefunden, um zu arbeiten, ist es, den Param-Typ von Varchar zu Nvarchar zu ändern. Aber das wäre eine Menge Arbeit (viele verschiedene Verfahren). Gibt es einen globalen Ansatz, der funktionieren könnte?

Vielen Dank und einen schönen Tag

+0

Vielleicht sollten Sie Ihre Server-Sortierung zu SQL_SLOVAK_CP1250_CI_AS ändern? –

+0

@DenisRubashkin wird versuchen, aber scheint wie eine Nuke-Option. Könnten auch andere Datenbanken sein, die gleichzeitig auf dem Server mit unterschiedlichen Sortierungen laufen. –

Antwort

0

Das Problem in Spalte Sortierungs ist. Jeder Wert an sie übergeben wird seine Zusammentragung Spalte Sortierungs geändert:

declare @table table(txt varchar(10) collate SQL_Latin1_General_CP1_CI_AS) 
insert into @table values ('ŘŤČ' collate SQL_SLOVAK_CP1250_CI_AS) 
--result will be changed, even with explicit collation 
select * from @table 
go 

declare @table table(txt varchar(10) collate SQL_SLOVAK_CP1250_CI_AS) 
insert into @table values ('ŘŤČ') 
--correct output 
select * from @table 
go 

So müssen Sie Sortierungs in Spalte ändern:

alter table TABLE_NAME alter column TextCol varchar(...) collate SQL_SLOVAK_CP1250_CI_AS 
+0

Thx aber nein, würde sagen, die Kollage kommt zu spät, nachdem der Parameter an die Prozedur übergeben wird, wird es zu Latin1 kollationiert –

+0

@VladislavZalesak Siehe Update –

+0

True, aber die Temp-Prozedur speichert in einem normalen, nicht-Temp , Tisch und dort ist die Zusammenstellung in Ordnung. –