繁体   English   中英

TSQL-参数和动态表名称

[英]TSQL - Parameters and dynamic table names

请参见下面的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语句必须是: select @ID=ID FROM @TableName WHERE 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM