就像在execute_sql中搜索不能正常工作一样

时间:2014-11-04 08:20:54

标签: sql-server sql-like sp-executesql

我在sp_executesql中面临一个非常奇怪的搜索行为:

此语句返回0行:

exec sp_executesql N'SELECT * FROM MyTable WHERE Name LIKE ''%'' +
     @Name + ''%''',N'@Name nvarchar(7)',@Name=N'100024​'

当此等价物返回所需的行时:

DECLARE @Name nvarchar(7)=N'100024'    
SELECT * FROM MyTable WHERE Name LIKE '%' + @Name + '%'

exec sp_executesql命令有什么问题?如果我用它来搜索其他行,如“100033”,它会找到该行,所以语法必须正常(事实上,在尝试调试为什么我的asp.net页面没有找到这个特定元素时,查询是从SQL事件探查器获取的)

3 个答案:

答案 0 :(得分:3)

这里有一个不可见的符号@Name=N'100024​'

enter image description here

答案 1 :(得分:0)

N'100024​'部分中有奇怪的unicode字符。 尝试删除部分N'100024​'并重新编写。

示例 - 第一行正常,第二行不起作用:

exec sp_executesql N'SELECT * FROM #MyTable WHERE Name LIKE ''%''+@Name+''%''', N'@Name nvarchar(200)',@Name=N'100024'
exec sp_executesql N'SELECT * FROM #MyTable WHERE Name LIKE ''%''+@Name+''%''', N'@Name nvarchar(200)',@Name=N'100024​'

尝试在SQL管理工作室中保存查询,然后打开它,您将看到如下字符:@Name=N'100024‚Äč'。如果你想以unicode保存,它会提示你。

答案 2 :(得分:0)

您的单引号数似乎不正确(')。这(从您的sp_execute位复制):

DECLARE @Name nvarchar(7);
SET @Name = '100024​'
PRINT 'SELECT * FROM MyTable WHERE Name LIKE ''%'' +      @Name + ''%'''

输出:

SELECT * FROM MyTable WHERE Name LIKE '%' +      @Name + '%'

尝试在@name

之前和之后删除单引号
'SELECT * FROM MyTable WHERE Name LIKE ''%' +      @Name + '%'''

输出:

SELECT * FROM MyTable WHERE Name LIKE '%100024?%'