저장 프로 시저가 있으므로 저장 프로 시저 'B'라고 해 봅시다. 저장 프로 시저 'B'는 저장 프로 시저 'B'내의 임시 테이블에 삽입해야하는 결과 집합을 반환하는 저장 프로 시저 'A'를 호출하여 추가 변이를 수행합니다. 중첩 삽입 때문에 OPENROWSET
을 사용했습니다 (OPENQUERY
도 시도했습니다).동적 SQL 문에서 EXEC 프로시 저는 INSERT가 아닌 SELECT 만 수행합니다.
이제는 훌륭하게 작동하는 것 같습니다. 그러나 결과 집합을 반환하는 옆에 저장 프로 시저 'A'는 테이블에 INSERT를 수행합니다. 이상한 일은 저장 프로 시저 'A'가 저장 프로 시저 'B'에서 실행될 때 저장 프로 시저 'A'는 결과 집합 만 반환하고 전혀 삽입하지 않습니다. 그냥 INSERT INTO
전체 문장을 건너 뛰는 것 같습니다. 앞뒤에 삽입 SELECT 'test'
중단 점을 넣으려고했는데 잘 실행됩니다! 이것이 어떻게 가능한지? 이 (내가 약간의 데이터 전송과 열을 변경)처럼
이 쿼리는 같습니다
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'INSERT INTO #Temp (1,2,3)
SELECT * FROM OPENROWSET (
''SQLOLEDB'',
''Server=(local);TRUSTED_CONNECTION=yes;'',
''SET FMTONLY OFF EXECUTE StoredProcedureA
@Parameter1 = '''''[email protected]+'''''
,@Parameter_2 = '''''[email protected]+'''''
''
)'
EXEC(@SQL)
오류가 반환되지 않습니다. 결과 집합 (SELECT statement from procedure A
)은 절차 B에서 #Temp
으로 올바르게로드되지만 절차 A에서 수행되는 INSERT
은 실행되지 않습니다.
openquery/openrowset은 INSERT를 허용하지 않고 SELECT 출력 만 실행합니까? 보안/권리 문제 일까? 이 문제를 해결할 다른 방법이 있습니까?
미리 감사드립니다.