(
a varchar(20) ,
b varchar(20),
c varchar(100),
tmphak varchar(500)
)
SET @sql = 'SELECT *'
SET @sql = @sql + ' FROM @RETURN_TABLE
'
SET @sql = @sql + ' WHERE tmpHak in(' + @tmpHakstr + ')'
EXEC (@sql)
==>
이럴때 @RETURN_TABLE 이 테이블변수를 인식못하는데요
물론 SET @sql='' 이걸로 안감싸고 그냥 Selet 할때는 인식이 됩니다.
이유가 있어서 이렇게 했는데요
SET @sql=여기에다가 집어넣고 @RETURN_TABLE이 인식이 되게 할려면 어떻게 해야 할까요?
Comment 2
-
PerryLous
2013.04.02 10:56
-
catchv
2013.04.02 14:57
테이블 변수의 범위는 변수가 선언된 함수, 저장 프로시저 또는 일괄 처리입니다.
꼭 테이블 변수를 동적쿼리에 사용하셔야 한다면
타입으로 선언하고 사용하는 방법이 있기는 하지만 권하고 싶지는 않습니다.
예제를 만들어 보았습니다.
IF (exists(SELECT * FROM sys.types WHERE name = 'RETURN_TABLE'))
DROP TYPE RETURN_TABLE
GOCREATE TYPE RETURN_TABLE AS TABLE
(
a varchar(20) ,
b varchar(20) ,
c varchar(100) ,
tmphak varchar(500)
)
GODECLARE @RETURN_TABLE RETURN_TABLE
DECLARE @sql NVARCHAR(1000)
SET @sql = ' SELECT * '
SET @sql = @sql + ' FROM @var '
EXEC sp_executesql @sql, N'@var RETURN_TABLE READONLY', @RETURN_TABLE-- catchv
SET @sql = ' DEClARE @RETURN_TABLE TABLE '
SET @sql = @sql + ' ( '
SET @sql = @sql + ' a varchar(20) , '
SET @sql = @sql + ' b varchar(20), '
SET @sql = @sql + ' c varchar(100), '
SET @sql = @sql + ' tmphak varchar(500) '
SET @sql = @sql + ' ) '
SET @sql = @sql + 'SELECT *'
SET @sql = @sql + ' FROM @RETURN_TABLE '
--SET @sql = @sql + ' WHERE tmpHak in(' + @tmpHakstr + ')'
exec (@sql)
이렇게 같이 넣으셔서 하시면 됩니다.