【问题标题】:Get data from all tables ending with a specific string从所有以特定字符串结尾的表中获取数据
【发布时间】:2020-08-19 10:26:26
【问题描述】:

我正在寻找从许多以“_seq”结尾的不同表中获取 nextval 列的查询。

我知道如何获取表的名称...

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME LIKE '%seq'

但我找不到如何一次从所有这些表中获取值...

所有这些表都有相同的列。

【问题讨论】:

  • 看看information_schema.columns

标签: sql database sql-server-2012 information-schema


【解决方案1】:

您只能使用动态 SQL 来实现这一点。当您使用 SQL Sevrer 2012 时,您需要使用“旧”FOR XML PATH 方法来创建“分隔”UNION ALL 查询。我还将模式和表的名称添加到查询的数据集中,因为我认为这将是有价值的信息:

DECLARE @SQL nvarchar(MAX),
        @CRLF nchar(2) = NCHAR(13) + NCHAR(10);

SET @SQL = STUFF((SELECT N'UNION ALL' + @CRLF +
                         N'SELECT N' + QUOTENAME(s.[name],'''') + N' AS SchemaName,' + @CRLF + 
                         N'       N' + QUOTENAME(t.[name],'''') + N' AS TableName,' + @CRLF + 
                         N'       NextVal' + @CRLF +
                         N'FROM ' + QUOTENAME(s.[name]) + N'.' + QUOTENAME(t.[name])
                  FROM sys.schemas s
                       JOIN sys.tables t ON s.schema_id = t.schema_id
                       JOIN sys.columns c ON t.object_id = c.object_id
                  WHERE t.[name] LIKE '%[_]seq'
                    AND c.[name] = N'NextVal'
                  FOR XML PATH(''),TYPE).value('.','nvarchar(MAX)'),1,11,N'') + N';'

--PRINT @SQL; --Your best friend.

EXEC sys.sp_executesql @SQL;

由于没有数据可供测试,如果不起作用,您将需要使用“最好的朋友”进行调试。

【讨论】:

    猜你喜欢
    • 2021-01-06
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多