下面是我每月运行的重复代码的示例摘录。每次运行,都会根据月份创建一个新表。例如,创建的表名是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 中是否有可能实现我的设想?
在 SQL Server 中,您需要在非动态代码中保持表名和列名静态。
为了做你想做的事情,你必须使用动态 SQL - 为你的 SQL 语句声明变量,动态填充 SQL 语句 - 使用你的 @TableName 变量提供表名 - 然后执行动态 SQL。
使用动态 SQL 需要考虑很多问题。一个良好的开端是动态SQL从厄兰Sommarskog这篇文章,“在好的和坏的一面一个相当长的一块动态SQL的诅咒和祝福”