2013-08-26 3 views
0

SQL 문자열을 사용하여 변수에 선택 값을 지정하고 싶습니다. 다음은 내 코드입니다 :Sql 문자열을 사용하여 변수에 값을 할당하는 방법

DECLARE @maxRow INT, @tableName NVARCHAR(128) = N'whatever'; 

select @maxRow=Max(id) from @tableName 

하지만이 오류가 발생합니다 :

Msg 1087, Level 16, State 1, Line 3
Must declare the table variable "@tableName".

나는 변수를 선언했다하더라도.

답변

1

동적 SQL에 넣지 않는 한 테이블 이름에 변수를 사용할 수 없습니다. 이 코드는 현재 @tableName이 문자열이 아닌 테이블 변수가 될 것으로 예상합니다. 구문에서 알 수 있듯이 이것은 의도 한 것이 아닙니다. 이 사용은 하위 최적 설계 냄새가 상당한 SQL 주입 위험에 빌려 준다, 그러나 당신은 대신에이 코드를 시도 할 수 있습니다 :

DECLARE @maxRow INT; 

DECLARE @sql NVARCHAR(MAX) = N'SELECT @maxRow = MAX(id) FROM ' 
    + QUOTENAME(@tableName) + ';'; 

EXEC sp_executesql @sql, N'@maxRow INT OUTPUT', @maxRow OUTPUT; 

PRINT @maxRow; 

SQL 주입 및 정상화에 읽어 마십시오.

+0

고마워요 .. 이것은 완벽하게 작동합니다. – maria

관련 문제