如何在tsql中将N char与变量相加?
此sql查询返回正确的结果
select * from PersonsInfoTbl where Name LIKE N'علی%';
此sql查询返回错误的结果
declare @Name nvarchar(50)
set @Name = 'علی';
select * from PersonsInfoTbl where Name LIKE N''+@Name+'%';
我的数据库是Microsoft SQL Server 2008 R2
答案 0 :(得分:2)
您必须在任何nvarchar字符串文字前加上N.如果您不这样做,SQL Server将假定它不是nvarchar。
例如:
declare @Name1 nvarchar(50), @Name2 nvarchar(50)
set @Name1 = N'علی';
set @Name2 = 'علی';
select @Name1 "Name1", @Name2 "Name2"
将返回此:
Name1 Name2
-------- --------
علی ???
试试这个:
declare @Name nvarchar(50)
set @Name = N'علی';
select * from PersonsInfoTbl where Name LIKE @Name + N'%';
答案 1 :(得分:0)
你设置变量@Name而没有N'的问题,对于sql来说这是nessecary知道你将它设置为nvarchar
declare @Name nvarchar(50)
set @Name = N'علی';
select * from @t where Name LIKE N''+@Name+'%';
这将返回行
答案 2 :(得分:0)
添加另一个变量以将SQL命令存储为字符串。您还需要在变量和命令上使用unicode N,以便将文本也存储为unicode。
declare @Name nvarchar(50)
declare @sqlcmd nvarchar(max)
set @Name = N'علی';
set @sqlcmd = N'select * from PersonsInfoTbl where Name LIKE '''+@Name+'%'''
EXECUTE(@sqlcmd)
编辑:我认为动态部分在这种特定情况下不是必需的,但是你会发现这在将来编写查询时很有用。