SQL Server:将字符串文字分配给参数

时间:2017-07-08 14:52:01

标签: sql sql-server

我需要做类似的事情:

EXEC sp_ExecuteSQL N'select * from Members where Name like @pat',
   N'@pat nvarchar(max)', @pat=Tom

我的问题是关于最后一个参数。

当要分配的值是"简单"字符串,即没有空格等,我可以使用@pat=Tom之类的东西,不需要引号。

但是,当要分配的值以%字符结尾时,它不会起作用,我必须执行@pat=N'Tom%'之类的操作。

这是如何定义分配字符串文字的语法的?

这是否也意味着如果我的值包含单引号,我将不得不手动转义它?

1 个答案:

答案 0 :(得分:0)

我很惊讶它没有引号。这必须是exec的特点。

始终包含单引号:

EXEC sp_ExecuteSQL N'select * from Members where Name like @pat',
   N'@pat nvarchar(max)', @pat='Tom';

根据documentation

  

如果参数的值是对象名称,字符串,或   由数据库名称或模式名称限定,必须是整个名称   用单引号括起来。如果参数的值是a   关键字,关键字必须用双引号括起来。

我不知道为什么没有单引号就行。