>데이터 베이스 >MySQL 튜토리얼 >SQL Server의 동적 SQL 문에 테이블 변수를 전달하는 방법은 무엇입니까?

SQL Server의 동적 SQL 문에 테이블 변수를 전달하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-10 16:54:44515검색

How to Pass Table Variables to Dynamic SQL Statements in SQL Server?

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>

이 문을 실행하면 다음 오류가 발생할 수 있습니다.

  • 테이블 변수 "@RelPro"를 선언해야 합니다.
  • 테이블 변수 "@TSku"를 선언해야 합니다.

이 문제를 해결하기 위해 테이블 ​​값 매개변수(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.