我的数据库中有N个主表。要查看主表中的所有数据,当前我正在为每个表编写SELECT
查询。因此,我想编写一个sql查询以列出数据库中所有主表的数据。
由于我们对所有主表使用相同的标准,因此所有主表仅以后缀Master
结尾。像RoleMaster
,UserMaster
,UserRoleMaster
,OfficeMaster
,PincodeMaster
等。
我尝试过的
下面的查询返回所有主表的SELECT
查询。
SELECT 'SELECT * FROM ' + name FROM sysobjects WHERE xtype = 'U' AND name LIKE '%Master'
它返回
SELECT * FROM RoleMaster
SELECT * FROM UserMaster
SELECT * FROM UserRoleMaster
SELECT * FROM OfficeMaster
SELECT * FROM PincodeMaster
...
...
执行以下查询始终仅返回一个表的数据。
PRINT
语句仅返回SELECT * FROM RoleMaster
。DECLARE @DynamicSql AS VARCHAR (MAX) = '';
SELECT @DynamicSql = 'SELECT * FROM ' + name FROM sysobjects WHERE xtype = 'U' AND name LIKE '%Master'
PRINT @DynamicSql
EXEC (@DynamicSql)
问题是什么,我在这里错过了什么,为什么它没有列出所有主表的数据。
最佳答案
您需要在开始动态查询之前添加@DynamicSql
变量,例如SELECT @DynamicSql = @DynamicSql + '
在QUOTENAME(T.name)
之后,您需要添加定界符+ '; '
来分割每一行。
因此,以下查询将适合您的情况:
DECLARE @DynamicSql AS NVARCHAR (MAX) = '';
SELECT @DynamicSql = @DynamicSql +
'SELECT * FROM ' + QUOTENAME(S.name) + '.' + QUOTENAME(T.name) + '; '
FROM sys.objects T
JOIN sys.schemas S ON S.schema_id = T.schema_id
WHERE T.[type] = 'U' AND T.name LIKE '%Master'
--PRINT @DynamicSql
EXEC (@DynamicSql)
编辑:基于此comment,我已经更新了答案。
关于sql - 动态SQL查询以列出所有主表的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32115240/