这是我想要做的我有表列表(其中 50 个),在所有表中我有一个名为“ID”的公共列,我想要做的是传递将动态返回我的 MAX(ID ) 价值。我需要 MAX(ID) 值,因为我将把这个值用于其他东西。
所以我正在考虑创建一个函数,我将在其中传递表名,它将返回 MAX(ID) 值,然后我可以在其他选择语句中使用该函数。但这里的问题是 SQL 函数不支持动态 SQL
关于我还有哪些其他选项的任何建议,请记住我需要 SQL 中的 max(id) 值。
这是我想要做的我有表列表(其中 50 个),在所有表中我有一个名为“ID”的公共列,我想要做的是传递将动态返回我的 MAX(ID ) 价值。我需要 MAX(ID) 值,因为我将把这个值用于其他东西。
所以我正在考虑创建一个函数,我将在其中传递表名,它将返回 MAX(ID) 值,然后我可以在其他选择语句中使用该函数。但这里的问题是 SQL 函数不支持动态 SQL
关于我还有哪些其他选项的任何建议,请记住我需要 SQL 中的 max(id) 值。
create function [dbo].[LastIdOf](@TableName varchar(50)) returns int
as
begin
declare @LastId int;
select @LastId = convert(int, i.last_value) from sys.tables t inner join sys.identity_columns i on t.object_id = i.object_id where t.name = @TableName;
return @LastId;
end
尝试这样的事情:
select *
from TABLE A
where id = (
select max(id)
from TABLE
where Table.key = A.Table.key
);
你为什么不创建一个视图并在上面做一个 MAX(ID) ?
create proc procTableMaxID (@Tablename varchar(100)
as
DECLARE @SQL AS nvarchar(500)
SET @SQL = 'SELECT Max(ID) from ' + @Tablename
EXECUTE sp_executesql @SQL
Procs 不提供用作表或在 select 语句中的灵活性,但有一些方法可以解决这个问题。
select
'select max('+z.COLUMN_NAME +')' +' from '+z.TABLE_NAME from (
SELECT u.TABLE_NAME,u.COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u
left join INFORMATION_SCHEMA.TABLES t on u.TABLE_NAME = t.TABLE_NAME
WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1
AND u.TABLE_NAME = t.TABLE_NAME) as z