-1

我在 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 Profiler 获取的)

4

3 回答 3

3

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

在此处输入图像描述

于 2014-11-04T09:02:50.723 回答
0

您在零件中有奇怪的 unicode 字符N'100024​'。尝试删除部分 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 格式保存。

于 2014-11-04T08:33:54.430 回答
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?%'
于 2014-11-04T08:57:27.133 回答