2013-01-12 3 views
4

"exec (string)"에서 반환되는 변수를 할당하고 싶지만 구문에 어려움을 겪고 있습니다. 다음은 몇 가지 작업 코드 ...SQL에서 exec 문자열로 변수를 할당하는 방법은 무엇입니까?

내가 좋아하는 일을하고 싶습니다
declare @iGeographyLevel int = 2 
declare @iGeographyLevelID int = 64 
declare @sGeographyName varchar(30) 

declare @sSQL nvarchar(max) 

set @sSQL = ' 
select Name 
    from GeographyLevel'+ cast(@iGeographyLevel as varchar(5))+' 
    where GeographyLevel'+ cast(@iGeographyLevel as varchar(5)) + 'ID = '+ cast(@iGeographyLevelID as varchar(5)) 

exec (@sSQL) 

...

set @sGeographyName = exec (@sSQL) 
+0

일부 사람들은 http://stackoverflow.com/questions/2245691/how-to-assign-an-exec-result-to-a-sql-variable의 복제본이라고 말할 수 있습니다. SP – Mead3000

답변

6

sp_executesql는이 일을하는 가장 좋은 방법이다.

DECLARE @iGeographyLevel INT = 2 
DECLARE @iGeographyLevelID INT = 64 
DECLARE @sGeographyName VARCHAR(30) 
DECLARE @sSQL NVARCHAR(max) 

SET @sSQL = ' 
SELECT @sGeographyName = Name 
FROM GeographyLevel' + cast(@iGeographyLevel AS VARCHAR(5)) + ' 
WHERE GeographyLevel' + cast(@iGeographyLevel AS VARCHAR(5)) + 'ID = @iGeographyLevelID' 

EXEC sp_executesql 
    @sSQL, 
    N'@iGeographyLevelID INT, @sGeographyName VARCHAR(30) OUTPUT', 
    @iGeographyLevelID, 
    @sGeographyName OUTPUT 

SELECT @sGeographyName 

여기서 동적 SQL에 대한 요구 사항은 약간의 냄새가 난다. 왜 Level 열 (또는 테이블 이 분리되어야하는 경우 파티션 된보기 일 수도 있습니다)이있는 Geography 테이블이 없는지 확실하지 않습니다. 또한 변수 이름에 대한 헝가리 표기법은 최근에 widely discouraged입니다.

+0

명명 규칙은 우리 회사에 맡겨야합니다. 아무튼 감사합니다. – Mead3000

관련 문제