Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库中每个表的最大值(ID)_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 数据库中每个表的最大值(ID)

Sql 数据库中每个表的最大值(ID),sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图为我拥有的每个表获取最大值MAXID,该表在我的DB table_示例中包含ID,在特定的示例中包含一个schema_名称 举一个例子: SELECT MAX(ID) FROM Schema_name.Table_name1 这将检索表_name1上的最大ID值,但我有84个表。我只想知道一列中每个表的最大值。 这是我目前正在处理的代码: 我使用information_schema.columns自动获取表的名称以及每个表所属的模式,以便在一列中获取整个DB id maxid USE T

我试图为我拥有的每个表获取最大值MAXID,该表在我的DB table_示例中包含ID,在特定的示例中包含一个schema_名称

举一个例子:

SELECT MAX(ID) FROM Schema_name.Table_name1
这将检索表_name1上的最大ID值,但我有84个表。我只想知道一列中每个表的最大值。 这是我目前正在处理的代码: 我使用information_schema.columns自动获取表的名称以及每个表所属的模式,以便在一列中获取整个DB id maxid

USE TABLE_EXAMPLE
GO
DECLARE @ID NVARCHAR(MAX) --int

SET @ID = (SELECT DISTINCT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'SCHEMA_NAME' AND COLUMN_NAME IN ('ID') AND DATA_TYPE = 'INT')

SELECT @ID FROM (SELECT ('SCHEMA_NAME'+'.'+TABLE_NAME) AS TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'SCHEMA_NAME' AND COLUMN_NAME = 'ID' AND DATA_TYPE='INT') AS W
这个脚本检索错误的数据,但我认为我有点接近获取值,但我不确定我做错了什么。 有人能给我一个好方法吗?或者有更好的方法来完成吗?

像这样试试

这将为您提供脚本

SELECT DISTINCT 'SELECT MAX(' + + COLUMN_NAME + ') as ' + table_name + 'MaxId FROM ' + table_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
    AND COLUMN_NAME IN ('ID')
试着这样,

这将为您提供脚本

SELECT DISTINCT 'SELECT MAX(' + + COLUMN_NAME + ') as ' + table_name + 'MaxId FROM ' + table_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
    AND COLUMN_NAME IN ('ID')

也许有点动态SQL

编辑此选项将在一个数据集中返回表名和最大ID


也许有点动态SQL

编辑此选项将在一个数据集中返回表名和最大ID


这将枚举列Id为且此Id的最大值为的所有表:

DECLARE @query nvarchar(MAX);
SELECT @query = COALESCE(@query + char(10)+'UNION ALL '+char(10)+'SELECT '''+QUOTENAME(s.name)+'.'+QUOTENAME(T.name)+''' [Table], MAX(Id) [Max] FROM '+QUOTENAME(s.name)+'.'+QUOTENAME(T.name),
'SELECT '''+QUOTENAME(s.name)+'.'+QUOTENAME(T.name)+''' [Table], MAX(Id) [Max] FROM '+QUOTENAME(s.name)+'.'+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 C.name='Id';
EXEC(@query);

这将枚举列Id为且此Id的最大值为的所有表:

DECLARE @query nvarchar(MAX);
SELECT @query = COALESCE(@query + char(10)+'UNION ALL '+char(10)+'SELECT '''+QUOTENAME(s.name)+'.'+QUOTENAME(T.name)+''' [Table], MAX(Id) [Max] FROM '+QUOTENAME(s.name)+'.'+QUOTENAME(T.name),
'SELECT '''+QUOTENAME(s.name)+'.'+QUOTENAME(T.name)+''' [Table], MAX(Id) [Max] FROM '+QUOTENAME(s.name)+'.'+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 C.name='Id';
EXEC(@query);

如果您想要标识列中的最大值,而不考虑这些列的名称,那么这是一种非常简单的方法。这将为您提供表名、标识列的名称以及该列的最大值:

SELECT sys.tables.name AS [Table Name], 
    sys.identity_columns.name AS [Column Name],
    last_value AS [Last Value]      
FROM sys.identity_columns
    INNER JOIN sys.tables
        ON sys.identity_columns.object_id = sys.tables.object_id
ORDER BY last_value DESC

如果您想要标识列中的最大值,而不考虑这些列的名称,那么这是一种非常简单的方法。这将为您提供表名、标识列的名称以及该列的最大值:

SELECT sys.tables.name AS [Table Name], 
    sys.identity_columns.name AS [Column Name],
    last_value AS [Last Value]      
FROM sys.identity_columns
    INNER JOIN sys.tables
        ON sys.identity_columns.object_id = sys.tables.object_id
ORDER BY last_value DESC

此脚本将列出所有max ID。它假定您的第一列是ID,而不管其名称如何

DECLARE @Script AS VARCHAR(MAX) = ''

SELECT @Script = @Script + 'SELECT MAX(' + COLUMN_NAME + ') AS ID FROM ' + c.TABLE_NAME + '  UNION ALL ' + CHAR(13)+CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME
WHERE c.ORDINAL_POSITION = 1 and t.TABLE_TYPE = 'BASE TABLE' and c.TABLE_SCHEMA = 'dbo' and c.DATA_TYPE = 'int'

SELECT @Script = LEFT(@Script, LEN(@Script) - 12)

EXEC (@Script)

此脚本将列出所有max ID。它假定您的第一列是ID,而不管其名称如何

DECLARE @Script AS VARCHAR(MAX) = ''

SELECT @Script = @Script + 'SELECT MAX(' + COLUMN_NAME + ') AS ID FROM ' + c.TABLE_NAME + '  UNION ALL ' + CHAR(13)+CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME
WHERE c.ORDINAL_POSITION = 1 and t.TABLE_TYPE = 'BASE TABLE' and c.TABLE_SCHEMA = 'dbo' and c.DATA_TYPE = 'int'

SELECT @Script = LEFT(@Script, LEN(@Script) - 12)

EXEC (@Script)

是每个表中的列名ID吗?您只是想获得每个表中标识/索引列的最大值吗?@johnpsquet,但您还是发布了一个答案。。给OP一些时间。不是每个人都在,所以所有的time@TimCastelijns他是新来的。我只是想给你一些有用的建议。还是没有答案。@johnpsquet对不起,昨天我无法写作。回答您的问题,我只是想得到数据库中每个表的ID列的最大值,其中ID colunm存在。我之所以需要它,是因为我正在使用一个表调用,例如ID_sequence_Table,它拥有每个表的每个ID列的名称和下一个最大值。然后,我想从我要检索的值开始执行更新/插入。每个表中是否都有列名ID?您只是想获取每个表中标识/索引列的最大值吗?@johnpsquet,但您还是设法发布了答案。。给OP一些时间。不是每个人都在,所以所有的time@TimCastelijns他是新来的。我只是想给你一些有用的建议。还是没有答案。@johnpsquet对不起,昨天我无法写作。回答您的问题,我只是想得到数据库中每个表的ID列的最大值,其中ID colunm存在。我之所以需要它,是因为我正在使用一个表调用,例如ID_sequence_Table,它拥有每个表的每个ID列的名称和下一个最大值。然后我想从我想检索的值开始进行更新/插入。