2013-01-16 3 views
2

이 게시물 how to create temp table based on column number?에 기반하여 임시 테이블을 이름이 #VarTemp으로 만들 수 있습니다. 하지만 exec 저장 프로 시저의 데이터를 어떻게 펌핑 할 수 있습니까? ...을저장 프로 시저에서 임시 테이블에 데이터를 삽입하십시오.

DECLARE @ColCount int = 20 
DECLARE @Ct int = 1 
DECLARE @SQL nvarchar(max) = '' 

SET @SQL = 'CREATE TABLE #VarTemp(' 

WHILE @Ct < @ColCount+1 
BEGIN 
    SET @SQL += 'Col' + CAST(@Ct as nvarchar(8)) + ' nvarchar(256),' 
    SET @Ct = @Ct + 1 
END 
SET @SQL = LEFT(@SQL, (LEN(@SQL) - 1)) 
SET @SQL += ')' 

Exec (@SQL) 
INSERT into #VarTemp EXEC sp_FindStringInTable 'Nareshbhai%', 'dbo', 'aspnet_Membership' 
--- Get error Invalid object name '#VarTemp'. 
+1

참조 [여기] (http://stackoverflow.com/questions/5955074/whats-the-scoping-rule-for-temporary-tables-within-exec-within-stored-procedure). – HABO

답변

6

귀하의 임시 테이블이 EXEC 명령에 범위가 : 그것은 오류를

잘못된 개체 이름을 '#VarTemp'

이 내 코드입니다 던지고 그 명령문이 완료되면 자동으로 삭제됩니다.

임시 테이블을 동적으로 작성하는 경우 동일한 동적 SQL 문의 임시 테이블에 삽입해야합니다 ... 동일한 동적 SQL 문에서도이 테이블을 읽어야합니다.

SET @SQL = 'CREATE TABLE #VarTemp(' 

WHILE @Ct < @ColCount+1 
BEGIN 
    SET @SQL += 'Col' + CAST(@Ct as nvarchar(8)) + ' nvarchar(256),' 
    SET @Ct = @Ct + 1 
END 
SET @SQL = LEFT(@SQL, (LEN(@SQL) - 1)) 
SET @SQL += ') 

INSERT into #VarTemp EXEC sp_FindStringInTable ''Nareshbhai%'', ''dbo'', ''aspnet_Membership'' 

SELECT * FROM #VarTemp 
' 

Exec (@SQL) 
관련 문제