2014-06-10 2 views
0

아래의 DDL 참조하십시오TSQL - 매개 변수 및 동적 테이블 이름

Declare @ID int 
Declare @Name varchar(30) 
set @Name = 'Ian' 
select @ID=ID FROM Person WHERE [email protected] 
Print @ID 

내가 1가 화면에 출력 즉 기대하는 것처럼이 작동 :

CREATE TABLE Person (ID int identity, Name varchar(30), primary key(ID)) 
INSERT INTO Person (Name) VALUES ('Ian') 

아래 TSQL을 참조하세요. 테이블 이름을 동적으로 변경하려고합니다. 예 :

Declare @ID int 
Declare @Name varchar(30) 
Declare @TableName as varchar(30) 
set @TableName= 'Person' 
set @Name = 'Ian' 
select @ID=ID FROM @TableName WHERE [email protected] 
Print @ID 

위의 SQL은 분명히 작동하지 않습니다. TSQL을 사용해야한다는 것을 알고 있습니다. 나는 EXEC와 sp_executesql을 사용해 보았지만, 거기에는 부분적으로 만 갈 수있다. 어떻게 구현해야합니까? SQL 문은 select @ID=ID FROM @TableName WHERE [email protected]이어야합니다.

+1

쿼리를 작성하기 위해 문자열 변수를 만든 다음 해당 변수에 대해 sp_executesql을 사용하십시오. –

+0

읽어보기 : http://www.sommarskog.se/dynamic_sql.html#Common_cases – Anon

답변

1

동적 SQL을 사용해야합니다. 여기보세요 ...

Declare @ID int 
Declare @Name varchar(30) 
Declare @TableName sysname 
DECLARE @Sql NVARCHAR(MAX); 


set @TableName= 'Person' 
set @Name = 'Ian' 

SET @Sql = N'select @ID = ID FROM ' + QUOTENAME(@TableName) 
     + N' WHERE Name = @Name' 

EXECUTE sp_executesql @Sql 
        ,N'@ID int OUTPUT, @Name varchar(30)' 
        ,@ID OUTPUT 
        ,@Name 
PRINT @ID 
+0

감사합니다. 이것은 내가 뭘하고 있는지 보입니다. 나는 지금 시험 할 것이다. +1. – w0051977