【问题标题】:TSQL - Parameters and dynamic table namesTSQL - 参数和动态表名
【发布时间】:2014-07-31 17:19:19
【问题描述】:

请参阅下面的 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 sql-server tsql


【解决方案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

【讨论】:

  • 谢谢。这看起来是我所追求的。我现在将进行测试。 +1。
猜你喜欢
  • 2011-03-07
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 2014-07-31
相关资源
最近更新 更多