我正在编写一个程序来产生一个int输出变量,但我不知道如何使用动态sql来完成这个任务。如果我执行下面的过程,我可以在结果屏幕上显示@AnlyNum的值,但我只想让@AnlyNum变量设置一个值,以便我可以使用它。谢谢你。
Create procedure [dbo].[sp_test] @Db varchar(50), @RwNum int, @AnlyNum int output
Begin
Declare @Sql nvarchar(max) =
'Select ''@AnlyNum'' = (Select AnlyId From '+@Db+'..Test order by AnlyId desc OFFSET '+convert(varchar(10),@RwNum)+' rows fetch next 1 rows only)'
exec(@Sql)
这消除了SQL注入的顾虑,因为它正确地转义了数据库的名称,并且动态地针对该数据库执行,而不是在命令中嵌入数据库的名称。另外,你不需要
是动态的。
@RwNum
CREATE PROCEDURE dbo.test @Db sysname, @RwNum int, @AnlyNum int output BEGIN SET NOCOUNT ON; DECLARE @exec nvarchar(max) = QUOTENAME(@Db) + N'.sys.sp_executesql', @sql nvarchar(max) = N'SELECT @AnlyNum = AnlyId From dbo.Test order by AnlyId desc OFFSET @RwNum rows fetch next 1 rows only);';