动态SQL传递表名并返回最大ID值

时间:2013-06-15 00:21:04

标签: sql sql-server tsql dynamic-sql

以下是我要做的事情我有表格列表(其中50个),在所有表格中我有一个名为“ID”的公共列,我要做的是传递表名,它会动态返回我的MAX(ID)值。我需要MAX(ID)值,因为我将把这个值用于其他东西。

所以我想创建一个函数,我将传递表名,它将返回MAX(ID)值,然后我可以在我的其他select语句中使用该函数。但这里的问题是SQL函数不支持动态SQL

关于我有什么其他选项的任何建议,请记住我需要SQL中的max(id)值。

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

为什么不创建一个View并在其上执行MAX(ID)?

答案 2 :(得分:0)

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语句的灵活性,但有很多方法可以解决这个问题。

答案 3 :(得分:0)

尝试这样的事情:

select *
from TABLE A
where id = (
  select max(id)
  from TABLE
  where Table.key = A.Table.key
);

答案 4 :(得分:0)

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
相关问题