我們正在運行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