Tôi đang cố gắng sử dụng CONTEXT_INFO
để chuyển mã người dùng từ quy trình được lưu trữ vào trình kích hoạt DELETE cho mục đích kiểm tra bảng.Truyền CONTEXT_INFO đến varchar và độ dài kết quả
Tất cả đều hoạt động tốt, tuy nhiên tôi nhận thấy rằng độ dài của mã người dùng được lưu trong bảng kiểm tra không chính xác.
Đi kịch bản này là một ví dụ ...
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
Kết quả:
len (@userCode) = 8
len (@temp_userCode) = 50
Tại sao biến số @temp_userCode
quay lại với chiều dài là 50 và làm cách nào tôi có thể cắt nó về độ dài ban đầu để lưu trữ nó ctly?
Thông tin thêm:
Chạy SQL Server 2005, tuy nhiên giải pháp cần phải làm việc trong tất cả các phiên bản 2005 trở đi.
này tuy nhiên việc tôi đã phải thay đổi collation để SQL_Latin1_General_CP437_BIN. Điều này được dựa trên thử nghiệm và lỗi tuy nhiên mà không để lại cho tôi với sự tự tin nhiều. Làm thế nào tôi có thể làm rõ collation tôi nên sử dụng? –
@Poz - Bạn không nói rõ phiên bản SQL Server trong câu hỏi của mình. Nếu trước năm 2008, các collations '100' sẽ không có sẵn. –
Xin lỗi. Tôi đang chạy năm 2005, tuy nhiên nó cần phải phù hợp với tất cả các phiên bản trên. –