我正在撰寫一個生成 int 輸出變數的程序,但我不確定如何使用動態 sql 來執行此操作。如果我執行以下程序,我會在結果螢屏中顯示@AnlyNum 值,但我只想為@AnlyNum 變數設定一個值,以便我可以使用它。謝謝你。
Create procedure [dbo].[sp_test] @Db varchar(50), @RwNum int, @AnlyNum int output
As
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)'
End
exec(@Sql)
uj5u.com熱心網友回復:
這通過正確轉義資料庫名稱并針對該資料庫動態執行而不是在命令中嵌入資料庫名稱來消除 SQL 注入問題。此外,您不需要@RwNum動態。
CREATE PROCEDURE dbo.test
@Db sysname,
@RwNum int,
@AnlyNum int output
AS
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);';
EXEC @exec @sql, N'@AnlyNum int output, @RwNum int',
@AnlyNum output, @RwNum;
END
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/443358.html
標籤:sql sql服务器 tsql 存储过程 动态 sql
下一篇:根據其他記錄更新記錄
