动态 SQL 查询列出所有 master table 的数据
Dynamic SQL query to list all master table's data
我的数据库中有 N 个大师 table。要查看主 table 中的所有数据,目前我正在为每个 table 编写 SELECT
查询。所以我喜欢写一个 sql 查询来列出我的数据库中所有我的主人 table 的数据。
由于我们对所有大师 table 使用相同的标准,因此所有大师 table 仅以后缀 Master
结尾。像 RoleMaster
、UserMaster
、UserRoleMaster
、OfficeMaster
、PincodeMaster
等等。
我试过的:
下面的查询,returns SELECT
查询所有 master table。
SELECT 'SELECT * FROM ' + name FROM sysobjects WHERE xtype = 'U' AND name LIKE '%Master'
它returns
SELECT * FROM RoleMaster
SELECT * FROM UserMaster
SELECT * FROM UserRoleMaster
SELECT * FROM OfficeMaster
SELECT * FROM PincodeMaster
...
...
始终执行以下查询 returns 一个 table 的数据。 PRINT
语句 returns 仅 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)
有什么问题,我在这里遗漏了什么,为什么它没有列出所有主人 table 的数据。
- 你需要在动态查询开始之前添加
@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)
编辑:基于此,我更新了答案。
我的数据库中有 N 个大师 table。要查看主 table 中的所有数据,目前我正在为每个 table 编写 SELECT
查询。所以我喜欢写一个 sql 查询来列出我的数据库中所有我的主人 table 的数据。
由于我们对所有大师 table 使用相同的标准,因此所有大师 table 仅以后缀 Master
结尾。像 RoleMaster
、UserMaster
、UserRoleMaster
、OfficeMaster
、PincodeMaster
等等。
我试过的:
下面的查询,returns SELECT
查询所有 master table。
SELECT 'SELECT * FROM ' + name FROM sysobjects WHERE xtype = 'U' AND name LIKE '%Master'
它returns
SELECT * FROM RoleMaster
SELECT * FROM UserMaster
SELECT * FROM UserRoleMaster
SELECT * FROM OfficeMaster
SELECT * FROM PincodeMaster
...
...
始终执行以下查询 returns 一个 table 的数据。 PRINT
语句 returns 仅 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)
有什么问题,我在这里遗漏了什么,为什么它没有列出所有主人 table 的数据。
- 你需要在动态查询开始之前添加
@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)
编辑:基于此