2011-03-02 4 views
5

내 T-SQL 스크립트에서 동일한 긴 테이블 이름을 여러 번 참조합니다. 다른 테이블에서이 쿼리를 사용합니다.T-SQL 테이블 이름 별칭

테이블 이름을 변수로 참조 할 수 있습니까? 그렇다면 스크립트에서 사용할 변수를 맨 위에 선언하고 값을 설정하여 스크립트에서 변경하지 않고 여러 테이블에서 변수를 실행할 수 있습니다.

답변

1

당신은 그 테이블의 동의어를 만들 수 있지만, 분명히 당신은 아무도 실행중인 스크립트 동안 동의어의 정의를 변경하지 있는지 확인해야 할 것 (그리고 스크립트의 어떤 병렬 호출)

당신이 실행되고 있지 SSMS에있는 이들? 그래서 당신 (이하 "조회"메뉴에서) SQL CMD 모드를 설정하고

:setvar tablename "spt_values" 

use master 

select * from $(tablename) 
+0

고맙습니다. – user219628

1

를 사용할 수 있다면 당신은 같은이 작업을 수행 할 수 있습니다 :

Declare @TableName As nvarchar(max) 
Declare @SQL AS nvarchar(max) 
@TableName = 'longtablename' 

@SQL = 'Select * From ' + @TableName 
EXEC(@SQL) 
+0

동적 SQL, 어! 이것은 OP가 사용 권한 및 쿼리 계획을 다시 컴파일하기를 원하지 않는 모든 종류의 부작용이 있습니다. – JohnFx

+2

@JohnFx, 그는 그것을 할 수있는 방법을 물었습니다. 당신이하는 일을 안다면 솔직히 Dynamix SQL에 아무런 문제가 없습니다. 또한 테이블을 변경하는 경우 이러한 모든 문제를 처리 할 것입니다. – msarchet

+0

변수와 같이 테이블 이름을 전환하는 부분을 포착하지 않았습니다. 이 경우 동적 SQL이 최상의 옵션 일 수 있습니다. 그러나, 나는 아직도 그것을 최후의 수단으로 사용한다고 말한다. – JohnFx

8

옵션의 몇.

: 여러 스크립트를 통해 문의를 많이 이상이 작업을 수행해야하는 경우

SELECT * 
FROM MySuperLongTableName T 
WHERE T.SomeField=1 

는 동의어가 더 좋은 옵션이 될 수 있습니다 당신과 같이 테이블 이름을 별칭 수있는 단일 SQL 문 내에서

CREATE SYNONYM SuperT FOR dbo.MySuperLongTableName 
+0

이 작품도, 감사합니다 선생님 – user219628

+0

깔끔한! 그러나 그것이 작동한다는 것을 증명하기위한 시도에서 동의어와 개체 이름 사이에 "for"키워드를 넣어야한다는 것을 알았습니다. http://msdn.microsoft.com/en-us/library/ms177544.aspx에 따라. "for"가 없으면 작동합니까? 그렇다면 어떻게? – Cyberherbalist

관련 문제