2013-05-30 187 views
0

我花了很多時間弄清楚什麼是錯誤不正確的SQL語法

l有這樣的代碼。

DECLARE @GeofenceName nvarchar(50) = ''; 
DECLARE @sql AS NVARCHAR(MAX) 

SET @sql = N'select * from GeofenceMaster where GeofenceName = GName' 

EXEC sp_executesql @sql,N'GName nvarchar(50)',@GeofenceName 

PRINT @sql 

它拋出這樣的錯誤。

Msg 102,Level 15,State 1,Line 1'GName'附近語法不正確。 從GeofenceMaster中選擇*其中GeofenceName = GName

有人知道是哪個導致此問題?

+0

你期望的參數是什麼'N'GName爲nvarchar(50)''和' @ GeofenceName'做什麼? – HABO

回答

1

問題是在變量 「的gname」(應該有@,在這種情況下會@GName),嘗試用下面的代碼,這完美的作品(更多信息,請參閱本LINK):

DECLARE @sql AS NVARCHAR(MAX) 
declare @GName AS nvarchar(50) = '' 

SET @sql = N'select * from GeofenceMaster where GeofenceName = ''' + @GName + '''' 

EXEC sp_executesql @sql,N'@GName nvarchar(50)',GName 

PRINT @sql 
+0

是'@'是必須的,我可以在那裏文檔。 –

+0

嗨維文웃,不深知你的問題,但如果你需要的文檔請到這裏http://support.microsoft.com/kb/262499在此頁面上有一些很好地工作的兩個例子,請複製粘貼,並幫助您瞭解方法「sp_executesql」 –

2

UPDATE

原來答案是不正確。不應該要求括號。見http://msdn.microsoft.com/en-us/library/ms188001(v=sql.105).aspx

新的答案

嘗試

DECLARE @GeofenceName nvarchar(50) = ''; 

DECLARE @sql AS NVARCHAR(MAX) 

set @sql = N'select * from GeofenceMaster where GeofenceName = @GName' 

EXEC sp_executesql @sql,N'GName nvarchar(50)',@[email protected] 

我已經修改了SQL本身,... = GName成爲... = @GName和執行,..., @GeofenceName變得..., @GName = @GeofenceName

原來的答覆

您需要添加一些括號。取而代之的

EXEC sp_executesql @sql,N'GName nvarchar(50)',@GeofenceName 

嘗試

EXEC sp_executesql(@sql,N'GName nvarchar(50)',@GeofenceName) 
+0

嗯,官方名稱是paratheses,但是是的,必須使用字符'('和')'來爲存儲過程分隔參數。 –

+0

它拋出'@ sql''附近語法錯誤' –