질문:
변수에 저장된 테이블 이름(예: "@tablename")을 사용하여 쿼리를 실행하려고 하면 테이블 변수 "@tablename"을 선언해야 한다는 오류가 표시됩니다.
해결책:
질문에 표시된 것과 같은 정적 쿼리에서는 테이블 이름과 열 이름이 정적이어야 합니다. 동적으로 채워진 테이블 이름이 있는 동적 쿼리의 경우 sp_executesql
을 사용하여 전체 SQL을 동적으로 생성하고 실행해야 합니다.
예:
다른 데이터베이스에 있는 동일한 테이블의 데이터를 비교한다고 가정해 보겠습니다. 정적 쿼리는 다음과 같습니다.
<code class="language-sql">SELECT * FROM [DB_ONE].[dbo].[ACTY] EXCEPT SELECT * FROM [DB_TWO].[dbo].[ACTY]</code>
이 쿼리를 동적으로 만들려면 스키마와 테이블 이름을 변수로 설정할 수 있습니다.
<code class="language-sql">declare @schema sysname; declare @table sysname; declare @query nvarchar(max); set @schema = 'dbo'; set @table = 'ACTY'; set @query = ' SELECT * FROM [DB_ONE].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table) + ' EXCEPT SELECT * FROM [DB_TWO].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table); EXEC sp_executesql @query;</code>
sp_executesql
을 이용하면 동적으로 생성된 SQL을 실행할 수 있다.
기타 참고사항:
동적 쿼리에는 신중한 고려와 유지 관리가 필요합니다. 코드에서 이러한 쿼리를 구현하기 전에 동적 SQL의 세부 사항을 숙지하는 것이 좋습니다.
위 내용은 SQL 쿼리에서 테이블 이름 변수를 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!