繁体   English   中英

通用SQL以表和列名的形式获取最大值作为varchar

[英]Generic SQL to get max value given table and column names as varchar

使用以下SQL来获取特定主键的值非常容易:来自特定表的ID:myTale:

DECLARE @v_maxID bigint;
SELECT @v_maxID = MAX(ID) FROM myTable;

我需要的是通用SQL代码,用于从表中获取键的最大值,其中键和表都指定为varchar(max)类型作为参数:

DECLARE @v_maxID bigint;
-- SELECT @v_maxID = MAX(@p_ID) FROM @p_Table;

我将SELECT注释掉,因为它不起作用。 我尝试构建一个SQL字符串,可以执行它,但是无法将最大值返回到我的局部变量(@v_maxID)。 有什么建议么?

DECLARE @max bigint, @sql nvarchar(max)
SET @sql = N'SELECT @max = MAX(' + @p_ID + ') FROM ' + @p_Table

EXEC sp_executesql 
    @query = @sql, 
    @params = N'@max bigint OUTPUT', 
    @max = @max OUTPUT 

PRINT @max

用户是选择者,但我认为这是一个丑陋的想法(过于笼统)。 并且无法优化。 只需编写SQL。

如果我错了,请纠正我,但您不只是想要:

从mytable中选择MAX(ID)

只是在应用程序级别构建查询,因此查询的运行就像上面的查询一样。 在sql上执行操作肯定会打开sql注入,因为您必须使用exec()。 同样在两种情况下,请注意用户输入。

BC所述,您必须将sp_executesql与OUTPUT参数一起使用。

在SQL Server中使用sp_executesql存储过程时如何指定输出参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM