所以我知道如何为我的所有表格执行此操作:
DECLARE @month VARCHAR(9)
DECLARE @db VARCHAR(10)
DECLARE @sql NVARCHAR(max)
SET @month = (SELECT Datename(month, Getdate()))
SET @db = 'MyDatabase'
SET @sql = 'SELECT * INTO ' + @db + '.dbo.MyTable_' + @month
+ ' FROM ' + @db + '.dbo.MyTable'
PRINT @sql
EXEC Sp_executesql @sql
但是我无法将几个大型 SP 放入 @sql 变量中,即使我显然可以:
CREATE/ALTER PROCEDURE' 不允许将数据库名称指定为对象名称的前缀
有没有办法在没有整个文本的情况下编写 SP 传输脚本?
如果是这样,我怎样才能在变量中获取数据库名称USE [dbname]
我知道使用sqlmcd
模式我可以做类似的事情
:setvar dbname "MyDatabase"
USE $(dbname)
但我需要将 dbname 作为变量也喜欢
DECLARE @db VARCHAR(10)
SET @db = (SELECT Datename(year, Getdate()))
:setvar dbname @db
USE $(dbname)
因此,目标是每个月将一堆 SP 归档到数据库中,每年都有新的数据库,而无需手动更改脚本。