Sql-Server

創建一個動態聯合新表的視圖

  • September 11, 2016

我有一個名為的數據庫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

您可以使用文本模式並查看它正在建構的查詢,這要歸功於結尾附近的列印語句。

引用自:https://dba.stackexchange.com/questions/149335