2013-10-13 1 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 지정된 인수를 너무 많이를 얻고있다.

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

하지 : 당신이 그와 같은 동적 SQL을 만들 때

답변

1

, 당신은 ''

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 , '','') 
+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 
관련 문제