我正在尝试使用以下代码重命名SQL Server 2008 R2中的表;
declare @date varchar(8)
set @date = convert( varchar(8), getdate(), 112)
exec sp_rename 'LM_SM_Billing_and_Send_Data', 'LM_SM_Billing_and_Send_Data_@date'
我的目的是使用附加的当前日期重命名该表。
select convert( varchar(8), getdate(), 112)
返回20141219
但是当我运行重命名时,它会命名表格;
LM_SM_Billing_and_Send_Data_@date
而不是插入日期
我想知道是否可以将其重命名为;
LM_SM_Billing_and_Send_Data_20141219
使用表名中的变量。
我一直在谷歌搜索相似的东西似乎指向使用动态SQL,但我从来没有使用过它,也不确定语法是什么来获得我想要的结果。
答案 0 :(得分:5)
你在这里遇到的问题,正如John Saunders在他的评论中指出的那样,SQL不会将变量的值替换为你的参数。 (字符串插值)
在尝试解决此问题时,您可能遇到的另一个问题是在过程调用中连接。以下内容也 不 工作。
exec sp_rename 'LM_SM_Billing_and_Send_Data', 'LM_SM_Billing_and_Send_Data_' + @date
以上原因也会出错,因为参数可以是变量,也可以是常量,而不是如上所示的表达式。如果我们声明@myNewName
,并将所需的值设置为该变量,我们就可以将其传递给该过程。
尝试一下:
declare @date varchar(8)
set @date = convert( varchar(8), getdate(), 112)
declare @myNewName varchar(255) = 'LM_SM_Billing_and_Send_Data_' + @date
exec sp_rename 'LM_SM_Billing_and_Send_Data', @myNewName
这可能是一个很好的参考,因为我们继续使用SQL参数:http://msdn.microsoft.com/en-us/library/ms189260(v=sql.105).aspx
答案 1 :(得分:0)
使用Dynamic Sql
将变量附加到新表名。
使用select * into
语法将数据从新旧表复制到新表,此部分必须动态完成。
然后放弃旧桌子
declare @date varchar(8),
set @date = convert( varchar(8), getdate(), 112)
set @sql ='select * into LM_SM_Billing_and_Send_Data_'+@date+'
from LM_SM_Billing_and_Send_Data'
exec sp_executesql @sql
Drop table LM_SM_Billing_and_Send_Data