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

如您所见,我想要数据库命名变量。将整个脚本变成一个 exec 语句非常复杂,而且读起来也不是很漂亮。在文本文件中读取此脚本,在 @targetdatabase 和 @sourcedatabase 上进行替换然后执行它是一个想法吗?如果是这样,这将如何完成?

我期待您的想法和贡献!

编辑:脚本作为jobagent执行

4

1 回答 1

0

目前尚不清楚如何执行脚本,但假设您使用的是 sqlcmd.exe 或 SSMS,您可以使用sqlcmd 脚本变量在运行时替换变量。

于 2012-10-02T13:47:55.390 回答