だから私はすべてのテーブルに対してこれを行う方法を知っています:
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をデータベースにアーカイブし、毎年新しいデータベースを作成することです。