Sql-Server
創建一個動態聯合新表的視圖
我有一個名為的數據庫
DDOS_WAF_REPORT
,它有多個名稱格式dbo.DDOS_WAF_ACCOUNT_######
的表(5 或 6 位 ID 號)。所有表都具有完全相同的結構(列名和類型)。我想
UNION ALL
一起為他們創建一個視圖。此外,稍後將添加相同類型的新表到數據庫中,因此我需要視圖能夠“執行”數據庫中的所有現有表並添加它們(添加或創建視圖)刮)。我用硬編碼的表名創建了一個簡單的視圖,但我很難解決如何動態創建視圖的問題。我正在使用 SQL Server 2012。
添加的表是針對每個帳戶的 API 執行的外部腳本的結果,因此我無法避免在數據庫中有多個表。我假設我可能必須編寫一些實際執行並檢查新表名的腳本程式碼,但我想看一些範例來弄清楚如何做到這一點。
您可以使用游標準備 SQL 語句以建構 SQL 字元串,並使用
sp_executesql
.DECLARE @TableName nvarchar(400) DECLARE @DynSQL nvarchar(MAX) Set @DynSQL = '' DECLARE cursor1 CURSOR FOR select name from sys.tables where name like 'DDOS_WAF_ACCOUNT_%' OPEN cursor1 FETCH NEXT FROM cursor1 INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN -- Add the select code. Set @DynSQL = @DynSQL + 'Select * from ' + @TableName FETCH NEXT FROM cursor1 INTO @TableName -- If the loop continues, add the UNION ALL statement. If @@FETCH_STATUS = 0 BEGIN Set @DynSQL = @DynSQL + ' UNION ALL ' END END CLOSE cursor1 DEALLOCATE cursor1 Print @DynSQL exec sp_executesql @DynSQL
您可以使用文本模式並查看它正在建構的查詢,這要歸功於結尾附近的列印語句。