我们正在运行SQL Server 2008 R2和创造,这将创建一个新的数据库(以后可以脱机并存储在别处)的存档功能,然后拿数据出来我们的主数据库,并把它进入新的数据库,最后,在主数据库中创建一个视图来查看新表中的存档数据。创建视图
我的脚本来创建数据库,创建新数据库的归档表,从主数据库复制的记录,并把它们到归档数据库,并从主数据库中删除记录。现在我正在尝试创建视图的脚本:
declare @sql varchar(8000)
set @sql = 'create view [' + @srcdb + '].[dbo].[vw_artrans] as
select * from [' + @srcdb + '].[dbo].artrans
union
select * from [' + @archdb + '].[dbo].artrans'
exec (@sql)
但是,您无法传递数据库的名称来创建视图。
所以,我想这个代替:
declare @sql varchar(8000)
set @sql = 'use ' + @srcdb + '
go
create view [vw_artrans] as
select * from [' + @srcdb + '].[dbo].artrans
union
select * from [' + @archdb + '].[dbo].artrans'
exec (@sql)
但现在抱怨GO语句(不正确的语法)。
为存档数据创建的数据库的名称是在脚本中动态确定的(@archdb
包含名称),所以我无法在数据库名称中编写脚本,也无法运行第二个脚本。
正如一个侧面评论,你真的需要一个'UNION',意味着你需要从工会得到不同的行?它比'UNION ALL'慢得多,它只是结合了两个输出。你声明*“然后将数据从我们的主数据库中取出并放入新的数据库”*,这让我认为你想要'UNION ALL'。 – 2013-03-14 17:36:15
@DominicGoulet:你是正确的......我忘了,当我在样本SQL打字的ALL。 – Caynadian 2013-03-15 15:36:43
@MichaelFredrickson:我需要有一个GO命令,因为CREATE VIEW将无法正常工作,除非它在脚本中的第一个语句。 – Caynadian 2013-03-15 15:37:31