如何在tsql中将N char与变量相加?

时间:2017-05-16 20:04:18

标签: sql sql-server-2008 tsql

如何在tsql中将N char与变量相加?

此sql查询返回正确的结果

select * from PersonsInfoTbl where Name LIKE  N'علی%';

result image

此sql查询返回错误的结果

declare @Name nvarchar(50)
set @Name = 'علی';
select * from PersonsInfoTbl where Name LIKE  N''+@Name+'%';

result image

我的数据库是Microsoft SQL Server 2008 R2

3 个答案:

答案 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)

编辑:我认为动态部分在这种特定情况下不是必需的,但是你会发现这在将来编写查询时很有用。