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)
由于接近末尾的打印语句,您可以使用文本模式并查看它正在构建的查询。
归档时间: |
|
查看次数: |
10049 次 |
最近记录: |