2014-11-04 74 views
-1

我面對一個sp_executesql的內像搜索的一個很奇怪的現象:像execute_sql搜索工作不正常 - SQL Server的

這個語句返回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中獲取的)

回答

0

您在N'100024​'部分中有奇怪的Unicode字符。 嘗試刪除零件N'100024​'並重新寫入。

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

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

嘗試保存在SQL Management Studio中的查詢,然後打開它,你會看到這樣的字符:@Name=N'100024‚Äč'。它會提示你是否要保存在unicode中。

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?%' 
3

您在這裏@Name=N'100024​'

enter image description here

+0

幹得好,漂亮的拷貝一個無形的象徵! – 2014-11-04 10:12:23

+0

我想到了與你同樣的事情 - 謝謝! :) – 2014-11-04 10:19:20

+0

是的,無需爭議,這個問題應該作爲一個簡單的錯字封閉。 – 2014-11-04 10:54:37