Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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_Dynamic Sql - Fatal编程技术网

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

动态SQL传递表名并返回最大ID值,sql,sql-server,tsql,dynamic-sql,Sql,Sql Server,Tsql,Dynamic Sql,这就是我要做的,我有一个表50的列表,在所有的表中,我有一个公共列叫做ID,我要做的是传递表名,它将动态返回我的MAXID值。我需要MAXID值,因为我将把这个值用于其他内容 所以我想创建一个函数,在这里我将传递表名,它将返回我的MAXID值,然后我可以在我的其他select语句中使用该函数。但是这里的问题是SQL函数不支持动态SQL 关于其他选项的任何建议,请记住我需要SQL中的maxid值。为什么不创建一个视图并对其执行maxid?为什么不创建一个视图并对其执行maxid create pr

这就是我要做的,我有一个表50的列表,在所有的表中,我有一个公共列叫做ID,我要做的是传递表名,它将动态返回我的MAXID值。我需要MAXID值,因为我将把这个值用于其他内容

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


关于其他选项的任何建议,请记住我需要SQL中的maxid值。

为什么不创建一个视图并对其执行maxid?

为什么不创建一个视图并对其执行maxid

create proc procTableMaxID (@Tablename varchar(100)
as
DECLARE @SQL AS nvarchar(500)

SET @SQL = 'SELECT Max(ID) from ' + @Tablename


EXECUTE sp_executesql @SQL
PROC不提供作为表或select语句使用的灵活性,但有一些解决方法

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

PROC不提供作为表或select语句使用的灵活性,但有一些方法可以解决这一问题。

尝试以下方法:

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
);

试着这样做:

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

视图不能接受参数。我正在考虑创建一个动态SP,并将表名传递给该SP,将SP的值存储在临时表中,然后在其他SQL语句中使用该值。视图不能接受参数。我正在考虑创建一个动态SP,并将表名传递给该SP,将SP的值存储在临时表中,然后在我的其他SQL语句中使用该值。为什么不能使用存储过程?为什么不能使用存储过程?Jeff,感谢您的反馈,但我需要使用SQL中SP的值或函数。根据您的SP,我可以将返回SP的值存储在临时表中,并在SELECT语句中使用该临时表。Jeff,感谢您的反馈,但我需要使用SQL中SP或函数的值。根据您的SP,我可以在临时表中存储返回SP的值,并在SELECT语句中使用该临时表。基于标识列tnx的有趣解决方案。在这种情况下,也可以使用函数MAX value not last value,当有人使用IDENTITY\u INSERT OFF进行插入时会发生什么情况?IDENTITY\u INSERT OFF通常在有人进行批量加载时使用。开发人员必须考虑这个函数是否会在同一时间表中被使用。在这种情况下,也可以使用函数MAX value not last value,当有人使用IDENTITY\u INSERT OFF进行插入时会发生什么情况?IDENTITY\u INSERT OFF通常在有人进行批量加载时使用。开发者必须考虑这个函数是否会在同一时间表中被使用。如果它是一个日期字段,那么如果日期是日期字段,那么你必须像日期那样做,那么你必须像日期一样做。