创建一个动态联合新表的视图

Ari*_*oun 6 sql-server dynamic-sql view sql-server-2012

我有一个名为的数据库DDOS_WAF_REPORT,其中包含多个名称格式dbo.DDOS_WAF_ACCOUNT_######(5 位或 6 位 ID 号)的表。

所有表都具有完全相同的结构(列名和类型)。我想UNION ALL一起为他们创建一个视图。此外,还会有相同类型的新表稍后添加到数据库中,因此我需要视图能够“遍历”数据库中的所有现有表并添加它们(添加或创建视图)划痕)。

我已经用硬编码的表名创建了一个简单的视图,但是我很难解决动态创建视图的问题。我正在使用 SQL Server 2012。

添加的表是针对每个帐户的 API 运行的外部脚本的结果,因此我无法避免数据库中有多个表。我假设我可能需要编写一些脚本代码来实际运行并检查新表名,但我想看一些例子来弄清楚如何做到这一点。

小智 5

您可以使用游标来准备 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
Run Code Online (Sandbox Code Playgroud)

由于接近末尾的打印语句,您可以使用文本模式并查看它正在构建的查询。