Sad*_*die 4 sql sql-server sql-server-2008-r2
我正在尝试使用下面的代码重命名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'
Run Code Online (Sandbox Code Playgroud)
我的目的是使用附加的当前日期重命名表.
select convert( varchar(8), getdate(), 112)
Run Code Online (Sandbox Code Playgroud)
返回20141219
但是当我运行重命名时,它会命名表格;
LM_SM_Billing_and_Send_Data_@date
Run Code Online (Sandbox Code Playgroud)
而不是插入日期
我想知道是否有可能将其重命名为;
LM_SM_Billing_and_Send_Data_20141219
Run Code Online (Sandbox Code Playgroud)
通过使用表名中的变量.
我一直在谷歌搜索相似的事情似乎指向使用动态SQL,但我从来没有使用它,不知道什么语法将得到我正在寻找的结果.
您在此处遇到的问题,正如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
Run Code Online (Sandbox Code Playgroud)
这可能是一个很好的参考,因为继续使用SQL参数:http://msdn.microsoft.com/en-us/library/ms189260(v = sql.105).aspx