如何从MS SQL Server 2008 R2中ID = 1的每个表中检索所有记录



如何从每个表(ex:table1,table2,table3,... table)中检索所有记录,其中iD = 1来自单个数据库(ex:database1)R2?

让我们假设我有1个数据库,因为我有无限表(例如Table1,Table2,....,Tablen)。这是否可以从每个表上的ID = 1的整个数据库中获取所有记录?我认为SQL information_schema.tableinformation_schema.column可能是可能的,但我不知道该如何使用。

任何帮助

预先感谢!

您可以使用无证件的sp_msforeachtable

sp_msforeachtable
@command1 = 'SELECT * FROM ? WHERE id=1',
@whereand = ' And Object_id In (Select Object_id From sys.columns Where name=''id'')'

@command1 是您的查询。问号是存储过程用来插入表名称的占位符。

@whereand 将搜索限制为具有名为 ID

的列的表

我对mysql的了解不多,在db2

中使用它
Select C.NAME,C.ROLLNUMBER from TABLE1 C,TABLE2 A where C.ROLLNUMBER=A.ROLLNUMBER and id = 1 order by C.CIRCLENAME

希望这也可以。

如果您想手动提及表。

SELECT COL1,COL2,COL3....COLN FROM TABLE1 WHERE ID=1
UNION ALL
SELECT COL1,COL2,COL3....COLN FROM TABLE2 WHERE ID=1
UNION ALL
SELECT COL1,COL2,COL3....COLN FROM TABLE2 WHERE ID=1
:
:
:
UNION ALL
SELECT COL1,COL2,COL3....COLN FROM TABLEN WHERE ID=1

注意:COL1,COL2,COL3 ... COLN在所有提到的表中都应是相同的数据类型

这用于动态构建所有表格= 1

的表
SELECT STUFF((SELECT '
UNION ALL
SELECT COL1,COL2,COL3..COLN FROM '+TABLE_NAME + ' WHERE ID=1 ' 
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' FOR XML PATH(''),type).value('.', 'NVARCHAR(MAX)'),1,11,'')

注意:您的表必须包含通用列,即ID。根据您需要更改列名,但是SELECT语句中所有提到的列都应包含在所有表中。

最好的方法是生成动态查询并执行以获取所需信息。

要生成查询,您可以使用架构信息相关的系统表,并以固定格式表馈送数据。即,制作具有定义列结构的修复格式表。这将有助于提供数据。例如:

CREATE TABLE AllTableData
(
    TableId int,
    TableName nvarchar(250),
    TableData NVARCHAR(max),
    SelectedId int
)

其中TableID是系统表和TableData的表ID,将包含具有某些分隔符标识符的表的所有列的串联值字符串。

;WITH T AS 
(
    SELECT 
        T1.* 
    FROM 
        INFORMATION_SCHEMA.TABLES T1
        INNER JOIN INFORMATION_SCHEMA.COLUMNS T2 ON T2.TABLE_NAME = T2.TABLE_NAME
    WHERE 
        T2.COLUMN_NAME = 'Id'
        AND T1.TABLE_TYPE='BASE TABLE'
),
DynamicQuery AS (
    SELECT 
        1 AS Id,
        CONCAT(
            'SELECT ', QUOTENAME(T.TABLE_NAME,''''),' AS [TableName],',
            CONCAT(' CONCAT(',STUFF((SELECT CONCAT(', [' , C.COLUMN_NAME,']' )
                    FROM INFORMATION_SCHEMA.COLUMNS C
                    WHERE C.TABLE_NAME = T.TABLE_NAME
                FOR XML PATH('')), 1, 1, ''),') AS [TableData]'
                )
                ,', 1 AS [SelectedId] FROM ',   T.TABLE_NAME,' WHERE Id = 1'
            ) [FinalString]
    FROM T
) 
SELECT DISTINCT
   STUFF((SELECT ' UNION ALL ' + DQ2.FinalString 
          FROM DynamicQuery DQ2
          WHERE DQ2.Id = DQ1.Id
          FOR XML PATH('')), 1, 10, '') [FinalString]
FROM DynamicQuery DQ1
GROUP BY DQ1.Id, DQ1.FinalString

我认为,这就是您要搜索的。

最新更新