列出所有主表数据的动态SQL查询

列出所有主表数据的动态SQL查询,sql,sql-server,dynamic-sql,Sql,Sql Server,Dynamic Sql,我的数据库中有N个主表。为了查看主表中的所有数据,目前我正在为每个表编写SELECT查询。因此,我喜欢编写一个sql查询来列出数据库中主表的所有数据 因为我们对所有主表使用相同的标准,所以所有主表都仅以后缀master结尾。像RoleMaster、UserMaster、UserRoleMaster、OfficeMaster、PincodeMaster等等 我所尝试的: 下面的查询返回所有主表的SELECT查询 SELECT 'SELECT * FROM ' + name FROM sysobje

我的数据库中有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语句仅从RoleMaster返回SELECT*

问题是什么,我在这里遗漏了什么,为什么不列出所有主表的数据

您需要在动态查询开始之前添加@DynamicSql变量,比如选择@DynamicSql=@DynamicSql+' 在quotename.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)
编辑:基于此,我更新了答案

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)