gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:56:16 25 4
gpt4 key购买 nike

我的数据库中有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com