簡體   English   中英

從具有特定表名的所有表中選擇所有值

[英]Select all values from all tables with specific table name

編輯原始問題:

我們的UDW分為屬性表和屬性列表。

我想編寫一個數據字典查詢,該查詢可以動態地從%attr_list%類的所有表中提取所有列值,而不必編寫一系列的並集,並且每次在UDW中創建新的屬性列表時都進行更新或添加。

我們所有現有的屬性列表表都采用相同的格式(列數,大多數列名等)。 下面是我們現有視圖中的前兩個聯合,我希望避免在每次將新屬性列表添加到UDW時進行更新。

CREATE VIEW [dbo].[V_BI_DATA_DICTIONARY]
(      ATTR_TABLE
  ,ATTR_LIST_ID
  ,ATTR_NAME
  ,ATTR_FORMAT
  ,SHORT_DESCR
  ,LONG_DESCR
  ,SOURCE_DATABASE
  ,SOURCE_TABLE
  ,SOURCE_COLUMN
  ,INSERT_DATETIME
  ,INSERT_OPRID
   )
AS

SELECT 'PREAUTH_ATTR_LIST'             ATTR_TABLE
  ,[PREAUTH_ATTR_LIST_ID]          ATTR_LIST_ID
  ,[ATTR_NAME]                     ATTR_NAME
  ,[ATTR_FORMAT]                   ATTR_FORMAT
  ,[SHORT_DESCR]                   SHORT_DESCR
  ,[LONG_DESCR]                    LONG_DESCR
  ,[SOURCE_DATABASE]               SOURCE_DATABASE
  ,[SOURCE_TABLE]                  SOURCE_TABLE
  ,[SOURCE_COLUMN]                 SOURCE_COLUMN
  ,[INSERT_DATETIME]               INSERT_DATETIME
  ,[INSERT_OPRID]                  INSERT_OPRID
FROM [My_Server].[MY_DB].[dbo].[PREAUTH_ATTR_LIST]

UNION
SELECT 'SAVINGS_ACCOUNT_ATTR_LIST'     
  ,[SAVINGS_ACCOUNT_ATTR_LIST_ID]  
  ,[ATTR_NAME]                     
  ,[ATTR_FORMAT]                   
  ,[SHORT_DESCR]                   
  ,[LONG_DESCR]                    
  ,[SOURCE_DATABASE]
  ,[SOURCE_TABLE]
  ,[SOURCE_COLUMN]
  ,[INSERT_DATETIME]               
  ,[INSERT_OPRID]                  
FROM [My_Server].[MY_DB].[dbo].[SAVINGS_ACCOUNT_ATTR_LIST]'

對於SQL Server,您應該可以使用以下命令:

SELECT c.name AS ColName, t.name AS TableName
FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name LIKE '%attr_list%'

這將包括視圖和表格

SELECT COLUMN_NAME, TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME LIKE '%attr_list%'

如果所有表都包含相同的列,則可能對您有用。 只需更改臨時表和所選列以匹配您自己的列即可。

CREATE TABLE #results (
    ATTR_TABLE SYSNAME,
    ATTR_LIST_ID INT,
    ATTR_NAME NVARCHAR(50),
    ATTR_FORMAT NVARCHAR(50),
    SHORT_DESCR NVARCHAR(50),
    LONG_DESCR NVARCHAR(255),
    SOURCE_DATABASE NVARCHAR(50),
    SOURCE_TABLE NVARCHAR(50),
    SOURCE_COLUMN NVARCHAR(50),
    INSERT_DATETIME DATETIME,
    INSERT_OPRID INT
);

INSERT INTO #results
EXEC sp_MSforeachtable @command1 = 
    ' 
        SELECT ''?''
             , *
        FROM ? 
        WHERE ''?'' LIKE ''%ATTR_LIST%''
    '

SELECT *
FROM #results

DROP TABLE #results

編輯:用您的專欄更新了我的示例。 因為您在每個表中為ATTR_LIST_ID使用了不同的列名, ATTR_LIST_ID我將選擇更改為SELECT * 顯然,我不知道列的數據類型,因此您必須更改它們。

這在視圖中不起作用,但是您可以創建一個存儲過程。

如果使用MS SQL Server,請查看sys目錄視圖 您可以使用sys.tables並加入sys.columns來獲取表和列。 如果輸入sys.extended_properties,則可以獲取描述信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM