使用以下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)。有什么建议吗?
答案 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