声明变量用作表名的占位符文本,而不是使用声明表类型

1 sql-server t-sql

下面是我每月运行的重复代码的示例摘录。每次运行,都会根据月份创建一个新表。例如,创建的表名是YEAR2016..report_Nov2016,但下个月的表名将以_Dec2016. 我想在代码的开头使用一个声明变量,而不是使用 find&replace 来更改所有表名(10 次),这样我只需更改一次表名,它就会在整个代码中得到反映。

declare @table varchar(30)
set @table ='YEAR2016..report_Nov2016'
select  recipient_ID, recipient_Name, recipient_DOB,program_code
into @table 
from YEAR2016..claim_table
Run Code Online (Sandbox Code Playgroud)

分开批次

alter table @table
add Medicaid char(1)
GO
update @table set Medicaid =''
GO 
update @table set Medicaid ='Y' where program_code ='MK A'
Run Code Online (Sandbox Code Playgroud)

据我了解,declare @table table ()应该使用,但这不会实现我的意图,因为需要在数据库中创建一个表。我也知道,使用声明表类型,into @table将无法工作,需要是Insert into @table.

在 TSQL 中是否有可能实现我的设想?

Mik*_*lsh 5

在 SQL Server 中,您需要在非动态代码中保持表名和列名静态。

为了做你想做的事情,你必须使用动态 SQL - 为你的 SQL 语句声明变量,动态填充 SQL 语句 - 使用你的 @TableName 变量提供表名 - 然后执行动态 SQL。

使用动态 SQL 需要考虑很多问题。一个良好的开端是动态SQL从厄兰Sommarskog这篇文章,“在好的和坏的一面一个相当长的一块动态SQL的诅咒和祝福