Próbuję użyć CONTEXT_INFO
zdać userCode z procedury przechowywanej na spuście DELETE dla celów kontrolnych stół.Casting CONTEXT_INFO do varchar i uzyskaną długość
Wszystko działa dobrze, jednak zauważyłem, że długość kodu użytkownika zapisana w tabeli kontroli nie była poprawna.
Weź ten skrypt jako przykład ...
declare @userCode varchar(50)
set @userCode = 'TestUser'
declare @binary_userCode varbinary(128)
set @binary_userCode = cast(@userCode as varbinary(128))
set CONTEXT_INFO @binary_userCode
declare @temp_userCode varchar(50)
set @temp_userCode = (select cast(CONTEXT_INFO() as varchar(50)))
--set @temp_userCode = rtrim(ltrim(@temp_userCode))
select @userCode, len(@userCode), @temp_userCode, len(@temp_userCode)
set CONTEXT_INFO 0x
Wyniki:
len (@userCode) = 8
len (@temp_userCode) = 50
Dlaczego zmienna @temp_userCode
wraca z długością 50, i jak mogę ją przyciąć z powrotem do jej oryginalnej długości Ctly?
Dalsze informacje:
Uruchamianie SQL Server 2005, jednakże rozwiązanie musi działać we wszystkich wersjach od 2005 r.
Działa to jednak musiałem zmienić sortowanie do SQL_Latin1_General_CP437_BIN. Zostało to oparte na próbach i błędach, które nie pozostawiają mnie z dużą pewnością. Jak mogę wyjaśnić, które sortowanie powinienem używać? –
@Poz - W swoim pytaniu nie podano wersji programu SQL Server. Jeśli poprzednio 2008 r., Sortowanie "100" nie będzie dostępne. –
Przeprosiny. Pracuję w 2005 roku, jednak musi być odpowiedni dla wszystkich powyższych wersji. –