집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server의 동적 SQL 문에 테이블 변수를 전달하는 방법은 무엇입니까?
SQL Server의 동적 SQL 문에 테이블 변수 전달
저장 프로시저를 작성할 때 동적 SQL 문에서 선언된 테이블 변수를 참조하는 문제에 직면할 수 있습니다. 이로 인해 변수를 선언해야 한다는 오류가 발생할 수 있습니다.
다음 예를 고려해 보세요.
<code class="language-sql">set @col_name = 'Assoc_Item_' + Convert(nvarchar(2), @curr_row1); set @sqlstat = 'update @RelPro set ' + @col_name + ' = (Select relsku From @TSku Where tid = ' + Convert(nvarchar(2), @curr_row1) + ') Where RowID = ' + Convert(nvarchar(2), @curr_row); Exec(@sqlstat);</code>
이 문을 실행하면 다음 오류가 발생할 수 있습니다.
이 문제를 해결하기 위해 테이블 값 매개변수(TVP)를 사용할 수 있습니다. TVP를 사용하면 테이블 변수를 명시적으로 선언하지 않고도 동적 SQL 문에 전달할 수 있습니다. 그러나 이 방법을 사용하여 테이블의 값을 업데이트할 수는 없습니다.
예를 들어 다음 수정된 코드를 고려해 보세요.
<code class="language-sql">CREATE TYPE MyTable AS TABLE ( Foo int, Bar int ); GO DECLARE @T AS MyTable; INSERT INTO @T VALUES (1,2), (2,3) SELECT *, sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc] FROM @T EXEC sp_executesql N'SELECT *, sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc] FROM @T', N'@T MyTable READONLY', @T=@T </code>
이 코드는 하위 범위(동적 문 내)에서 참조되는 테이블 변수가 외부 범위의 테이블 변수와 동일하여 오류를 방지함을 보여줍니다. 핵심은 sp_executesql
을 사용하고 TVP 유형과 매개변수를 올바르게 선언하는 것입니다. 업데이트 작업의 경우 커서나 다른 대안을 사용하는 등 다른 접근 방식이 필요합니다.
위 내용은 SQL Server의 동적 SQL 문에 테이블 변수를 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!