我哪里做错了?
我正试图写一个简单的过程,将加密字符串转换为Unicode数字的连接字符串。这最终将是一个接收@EncryptedString
作为输入的函数。
当我执行此命令时,第一个print语句为@EncryptedString
中的每个字符生成七个字符的字符串消息,但其他两个print语句只产生空字符串消息,而不是连接的@UnicodeString
。
我意识到这是用一种非常过程化的风格编写的,但它很少会被使用,而且我是一个使用更面向批处理方法的初学者。
谢谢大家的帮助。
declare @EncryptedString varchar(20)='†‚x†ˆ‹‡}‹ƒ†‚x†ˆ‹‡}‹ƒ'
declare @UnicodeString varchar(140)=''
declare @i int=0
while (@i < len(@EncryptedString)+1)
begin
print right('0000000'+convert(varchar(7),unicode(substring(@EncryptedString,@i,1))),7)--FOR TESTING
set @UnicodeString=@UnicodeString+right('0000000'+convert(varchar(7),unicode(substring(@EncryptedString,@i,1))),7)
print @UnicodeString--FOR TESTING
set @i=@i+1
end
print @UnicodeString--FOR TESTING
不知道你想做什么,但nvarchar
是SQL Server中的unicode字符串类型,unicode字面量以N
开始。所以至少:
declare @EncryptedString nvarchar(20)= N'†‚x†ˆ‹‡}‹ƒ†‚x†ˆ‹‡}‹ƒ'
declare @UnicodeString nvarchar(140)= N''
declare @i int=0
while (@i < len(@EncryptedString)+1)
begin
print right('0000000'+convert(nvarchar(7),unicode(substring(@EncryptedString,@i,1))),7)--FOR TESTING
set @UnicodeString=concat(@UnicodeString,right('0000000'+convert(nvarchar(7),unicode(substring(@EncryptedString,@i,1))),7))
print @UnicodeString--FOR TESTING
set @i=@i+1
end
select @UnicodeString--FOR TESTING
HABO,你的答案就是答案。
我不知道为什么,但我默认了@i=0,而它应该是1。我看了100遍,也没看到我输入错了什么。
就是这样。
谢谢。