Sql server SQL Server查询以显示所有用户表中的表名、特定列名和当前值
我们所有的用户表都有一个主键和一个Sql server SQL Server查询以显示所有用户表中的表名、特定列名和当前值,sql-server,Sql Server,我们所有的用户表都有一个主键和一个rowid\u time列。我们希望开发一个SQL查询,其中列出: 表名 主键的值 rowid\u time列的值 (仅这三列,而不是表中的所有列) 用于数据库中的所有行和表 这可行吗?理想情况下,这是通过数据库视图交付的。使用动态SQL和 DECLARE @TableName sysname DECLARE @SQL nvarchar(max) DECLARE @PKColumnList nvarchar(max) DECLARE mycursor CU
rowid\u time
列。我们希望开发一个SQL查询,其中列出:
- 表名
- 主键的值
列的值rowid\u time
这可行吗?理想情况下,这是通过数据库视图交付的。使用动态SQL和
DECLARE @TableName sysname
DECLARE @SQL nvarchar(max)
DECLARE @PKColumnList nvarchar(max)
DECLARE mycursor CURSOR FAST_FORWARD
FOR
SELECT name FROM sys.tables order by Name
OPEN mycursor
FETCH NEXT FROM mycursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
----------------
SELECT @PKColumnList = string_agg(COLUMN_NAME, ',')
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE a
WHERE
EXISTS(
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS b
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
AND a.CONSTRAINT_NAME = b.CONSTRAINT_NAME) AND
TABLE_NAME = @tablename
SET @PKColumnList = concat(@PKColumnList+',','rowid_time')
SELECT @SQL = '
;with t1 as (
select ''' + @TableName + ''' as TableName
), t2 as (
SELECT
''' + @TableName + ''' as TableName,
COUNT(*) OVER (Partition By 1) as RowsCount, '
+ @PKColumnList +
' FROM [' + @TableName + ']
)
select
t1.TableName,
t2.RowsCount, '
+ @PKColumnList + '
from t1
full join t2
on t1.TableName = t2.TableName'
EXEC SP_EXECUTESQL @SQL
-----------------
FETCH NEXT FROM mycursor INTO @TableName
END
CLOSE mycursor
DEALLOCATE mycursor
EXEC sp_MSForEachTable 'SELECT ''?'' as TableName, ID, rowid_time FROM ?'
如果所有表的PK列都是ID列(没有复合键,所有PK字段都被命名为所有表的ID),则可以按如下方式使用过程
DECLARE @TableName sysname
DECLARE @SQL nvarchar(max)
DECLARE @PKColumnList nvarchar(max)
DECLARE mycursor CURSOR FAST_FORWARD
FOR
SELECT name FROM sys.tables order by Name
OPEN mycursor
FETCH NEXT FROM mycursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
----------------
SELECT @PKColumnList = string_agg(COLUMN_NAME, ',')
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE a
WHERE
EXISTS(
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS b
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
AND a.CONSTRAINT_NAME = b.CONSTRAINT_NAME) AND
TABLE_NAME = @tablename
SET @PKColumnList = concat(@PKColumnList+',','rowid_time')
SELECT @SQL = '
;with t1 as (
select ''' + @TableName + ''' as TableName
), t2 as (
SELECT
''' + @TableName + ''' as TableName,
COUNT(*) OVER (Partition By 1) as RowsCount, '
+ @PKColumnList +
' FROM [' + @TableName + ']
)
select
t1.TableName,
t2.RowsCount, '
+ @PKColumnList + '
from t1
full join t2
on t1.TableName = t2.TableName'
EXEC SP_EXECUTESQL @SQL
-----------------
FETCH NEXT FROM mycursor INTO @TableName
END
CLOSE mycursor
DEALLOCATE mycursor
EXEC sp_MSForEachTable 'SELECT ''?'' as TableName, ID, rowid_time FROM ?'
可能重复的