SQL Server 2000에서 실행을 사용하여 테이블 변수에 삽입 할 수 없다는 것이 사실입니까?
이 스크립트를 시도했는데 '테이블 변수에 삽입 할 때 실행을 소스로 사용할 수 없습니다'라는 오류 메시지가 나타납니다.
declare @tmp TABLE (code varchar(50), mount money)
DECLARE @q nvarchar(4000)
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail'
INSERT INTO @tmp (code, mount)
EXEC sp_executesql (@q)
SELECT * from @tmp
이것이 사실이라면 어떻게 해야 하나요?
참고 - 이 질문과 답변은 2000 버전의 SQL Server와 관련이 있습니다. 이후 버전에서는 INSERT INTO @table_variable ... EXEC ...
에 대한 제한이 해제되었으므로 이후 버전에는 적용되지 않습니다.
임시 테이블로 전환해야 합니다:
CREATE TABLE #tmp (code varchar(50), mount money)
DECLARE @q nvarchar(4000)
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail'
INSERT INTO #tmp (code, mount)
EXEC sp_executesql (@q)
SELECT * from #tmp
문서](http://msdn.microsoft.com/en-us/library/aa260638(v=sql.80).aspx)에서 가져옴:
테이블 변수는 지역 변수처럼 동작합니다. 테이블 변수는 선언된 함수, 저장 프로시저 또는 배치인 범위가 잘 정의되어 있습니다.
범위 내에서 테이블 변수는 일반 테이블처럼 사용할 수 있습니다. 테이블 또는 테이블 표현식이 SELECT, INSERT, UPDATE 및 DELETE 문에서 사용되는 모든 곳에 적용할 수 있습니다. 그러나 다음 문에서는 테이블을 사용할 수 없습니다:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable 문.
문서가 오해의 소지가 있습니다; 프로덕션 환경에서 다음 코드를 실행하고 있습니다.
DECLARE @table TABLE (UserID varchar(100))
DECLARE @sql varchar(1000)
SET @sql = 'spSelUserIDList'
/* Will also work
SET @sql = 'SELECT UserID FROM UserTable'
*/
INSERT INTO @table
EXEC(@sql)
SELECT * FROM @table
DECLARE @q nvarchar(4000)
SET @q = 'DECLARE @tmp TABLE (code VARCHAR(50), mount MONEY)
INSERT INTO @tmp
(
code,
mount
)
SELECT coa_code,
amount
FROM T_Ledger_detail
SELECT *
FROM @tmp'
EXEC sp_executesql @q
동적 쿼리에서 원하는 경우