通用SQL获取最大值,将表和列名称作为varchar

时间:2009-02-20 21:49:48

标签: sql sql-server-2005

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

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

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

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

我注释掉SELECT,因为它不起作用。我试图构建一个SQL字符串,我可以执行它,但我无法将最大值恢复到我的本地变量(@v_maxID)。有什么建议吗?

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

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

答案 2 :(得分:0)

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

SELECT MAX(ID)FROM mytable

答案 3 :(得分:0)

只需在应用程序级别构建查询,因此运行的查询就像上面那样。执行sql肯定会打开你的sql注入,因为你必须使用exec()。在任何一种情况下,都要小心用户输入。

答案 4 :(得分:0)

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

How to specify output parameters when you use the sp_executesql stored procedure in SQL Server