Sto provando a utilizzare CONTEXT_INFO
per passare un codice di accesso da una stored procedure a un trigger DELETE per scopi di controllo tabella.Trasmettere CONTEXT_INFO a varchar e la lunghezza risultante
Funziona tutto bene, tuttavia ho notato che la lunghezza del codice di accesso salvato nella tabella di controllo non era corretta.
Prendete questo script come un esempio ...
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
Risultati:
len (@userCode) = 8
len (@temp_userCode) = 50
Perché la variabile @temp_userCode
torna con una lunghezza di 50 e come posso ridimensionarla alla sua lunghezza originale per memorizzarla cor ctly?
Ulteriori informazioni:
esecuzione di SQL Server 2005, tuttavia la soluzione deve funzionare in tutte le versioni dal 2005 in poi.
Questo funziona però ho dovuto cambiare le regole di confronto a SQL_Latin1_General_CP437_BIN. Questo è stato basato su tentativi ed errori, tuttavia, che non mi lascia con molta fiducia. Come posso chiarire quale collation dovrei usare? –
@Poz: non hai indicato la versione di SQL Server nella tua domanda. Se precedente al 2008 le collazioni "100" non saranno disponibili. –
Scuse. Sto lavorando nel 2005, tuttavia deve essere adatto a tutte le versioni precedenti. –