TSQL-参数和动态表名称

TSQL-参数和动态表名称,sql,sql-server,tsql,Sql,Sql Server,Tsql,请参见下面的DDL: 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) set @Name = 'Ian' select @ID=ID FROM Person WHERE Name=@Name Print @ID

请参见下面的DDL:

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)
set @Name = 'Ian'
select @ID=ID FROM Person WHERE Name=@Name
Print @ID
这与我预期的一样,即1被打印到屏幕上。我想进行更改,使表名是动态的,即

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

上述SQL显然不起作用。我意识到我必须使用TSQL。我尝试过使用EXEC和sp_executesql,但我只能做到一部分。我如何实现这一点。SQL语句必须是:
从@TableName中选择@ID=ID,其中Name=@Name

您需要为此使用动态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

创建一个字符串变量来构建查询,然后对该变量使用sp_executesql。阅读以下内容:谢谢。这看起来是我想要的。我现在来测试一下+1.