如何从每个表(ex:table1,table2,table3,... table)中检索所有记录,其中iD = 1来自单个数据库(ex:database1)R2?
让我们假设我有1个数据库,因为我有无限表(例如Table1,Table2,....,Tablen)。这是否可以从每个表上的ID = 1的整个数据库中获取所有记录?我认为SQL information_schema.table
或information_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
我认为,这就是您要搜索的。