0

テーブルを動的に作成しようとしています。あるデータベース (@sourcedatabase) のテーブルを使用して、別のデータベース (@targetdatabase) にテーブルを作成します。

データベースに明示的に名前を付けると、これはうまく機能します。ただし、次の例のように動的にしたいと思います。私はそれについてたくさん読んだことがありますが、次のようなものを使用しても問題ありません

set @sql = 'DROP TABLE ' + @targetdatabase + '.' + @SomeNAME 
execute (@sql)

しかし、もう少し複雑になると途方に暮れます。

declare @sourcedatabase as varchar(max) = 'DATABASE1'
declare @targetdatabase as varchar(max) = 'DATABASE2'

declare @HighestID as int = (SELECT  max(Id) FROM @sourcedatabase.system.Organisationtype)
declare @i as int = (SELECT  max(Id) FROM @sourcedatabase.system.Organisationtype)

while @i >= (SELECT  min(Id) FROM @sourcedatabase.system.LaagTypeOrganisatie)
BEGIN
--SOME ACTIONS
set @i = @i + 1 
END 

declare @x as int = (select count(*) from @targetdatabase.sys.tables where name = @SomeNAME)

IF   @x <> 0
BEGIN
set @sql = 'DROP TABLE ' + @targetdatabase + '.' + @SomeNAME 
execute (@sql)
END

ご覧のとおり、database-naming 変数が必要です。このスクリプト全体を 1 つの exec ステートメントに変換するのは非常に複雑で、読みにくいものです。このスクリプトをテキストファイルで読み取り、@targetdatabase と @sourcedatabase を置き換えてから実行することは考えられますか? もしそうなら、これはどのように行われますか?

あなたのアイデアと貢献を楽しみにしています!

編集: スクリプトはジョブエージェントとして実行されます

4

1 に答える 1

0

スクリプトの実行方法は明確ではありませんが、sqlcmd.exe または SSMS のいずれかを使用していると仮定すると、実行時にsqlcmd スクリプト変数を使用して変数を置き換えることができます。

于 2012-10-02T13:47:55.390 に答える