我在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事件探查器获取的)
答案 0 :(得分:3)
这里有一个不可见的符号@Name=N'100024'
答案 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?%'