2013-10-13 15 views
1

具有將從逗號分隔的字符串返回整數值的函數,它有兩個參數(@string爲nvarchar(4000),@delimiter CHAR(1))。所以,問題是,如果我使用我得到錯誤動態查詢裏面這個功能,這裏是查詢我如何使用通行證逗號分隔字符串中的動態查詢在SQL

declare @ProductIDs varchar(11) 
declare @SQL varchar(max) 

set @ProductIDs='1,2,3,4' 
declare @query varchar(max) 
--set @query= @ProductIDs +','[email protected] 

SELECT @SQL = 'SELECT val FROM dbo.[fnDelimitedStringToTable]('+ @ProductIDs +' , '','')' 

Exec(@SQL) 

我收到錯誤過程或函數dbo.fnDelimitedStringToTable具有指定的參數太多。

回答

1

當你構建一個動態SQL這樣的,你需要用你的參數在雙引號''

declare @ProductIDs varchar(11) 
declare @SQL varchar(max) 

set @ProductIDs='1,2,3,4' 
declare @query varchar(max) 
--set @query= @ProductIDs +','[email protected] 

SELECT @SQL = 'SELECT val FROM dbo.[fnDelimitedStringToTable]('''+ @ProductIDs +''' , '','')' 

Exec(@SQL) 

這樣的SQL語句將是:

SELECT val FROM dbo.[fnDelimitedStringToTable]('1,2,3,4' , '','') 

,而不是:

SELECT val FROM dbo.[fnDelimitedStringToTable](1,2,3,4 , '','') 
+0

感謝您在代碼中進行更正,我在傳遞參數時錯過了''。謝謝你,你救了我的週末:-) – Dmehro

0

使用sp_executesql代替。在這種情況下,你可以傳遞參數作爲參數。

DECLARE @SQL nvarchar(max) 
DECLARE @ParmDef nvarchar(1000) 

DECLARE @ArgProductIDs nvarchar(100) 
DECLARE @Arg2 nvarchar(100) 
DECLARE @Arg3 nvarchar(100) 

SET @SQL = N'SELECT val 
      FROM dbo.[fnDelimitedStringToTable](@ProductIDs, @Param2, @Param3)'; 

SET @ParmDef = N'@ProductIDs nvarchar(100), 
       @Param2 nvarchar(100), 
       @Param3 nvarchar(100)'; 

SET @Arg1 = N'1,2,3,4'; 
SET @Arg2 = N''; 
SET @Arg3 = N''; 

EXEC sp_executesql @SQL, @ParmDef, 
     @ProductIDs = @ArgProductIDs, @Param2 = @Arg2, , @Param3 = @Arg3 
相關問題