2011-08-04 2 views
0

이 질문을 받았을 경우 사과 드리겠습니다. 답을 고사하고 싶습니다.동적 SQL의 "중첩"변수 - 올바른 구문을 유지하려면 어떻게해야합니까?

나는 다음을 수행 할 수있는 최선의 방법을 결정하기 위해 노력하고 있어요 :

Declare @sql nvarchar(4000) 
, @Filter nvarchar(500) 

SET @filter = 'WHERE value1 IN (''A'',''B'',''C'')' 

SET @sql = ' 
DECLARE @Field nvarchar(50) 

DECLARE process CURSOR FOR 
SELECT value2 
FROM table 
'[email protected]+' 

OPEN process 

FETCH NEXT FROM process 
INTO @field 

WHILE @@Fetch_Status = 0 
BEGIN 

EXEC stored_procedure 
@field = @field 
@filter = '[email protected]+' 

FETCH NEXT FROM process 
INTO @field 

END 

CLOSE process 
DEALLOCATE process 
' print @sql execute sp_executesql @sql 

여기서 문제는

이 코스의
DECLARE @Field nvarchar(50) 

DECLARE process CURSOR FOR 
SELECT value2 
FROM table 
WHERE value1 IN ('A','B','C') 

OPEN process 

FETCH NEXT FROM process 
INTO @field 

WHILE @@Fetch_Status = 0 
BEGIN 

EXEC stored_procedure 
@field = 'N' 
@filter = 'WHERE value1 IN ('A','B','C')' 

FETCH NEXT FROM process 
INTO @field 

END 

CLOSE process 
DEALLOCATE process 

(A)에서 구문 오류로 연결로 변환한다는 것입니다 , B 및 C

이 문제를 해결하기 위해 replace(@filter,','')의 변형을 시도했지만이 방법이 도움이되지 않습니다.

아이디어를주세요.

답변

0

변경이 부분에 너무 많은이

… 
EXEC stored_procedure 
@field = @field 
@filter = '''+REPLACE(@filter, '''', '''''')+'''
+0

감사와 같은

… EXEC stored_procedure @field = @field @filter = '[email protected]+' … 

; 매력처럼 작동합니다! 나는 그것을 과장 생각했다. –

관련 문제