回答

收藏

带有sp_executesql和参数的游标

技术问答 技术问答 170 人阅读 | 0 人回复 | 2023-09-12

我希望为我一直在苦苦挣扎的问题提供进一步的帮助,我昨天确实发布了一个类似的问题,但是我认为我所使用的示例对于我想要的而言太复杂了,因此我决定从头开始并编写自己的示例。
9 l' m0 s: A* a- s如前所述,我有一个包含多个sql语句的表,我想依次运行每个语句,并更新结果和运行代码的时间相同的表。到目前为止,我的代码贯穿每个SQL语句并执行,但我找不到通过执行每个单独的select语句来更新Last_Result的方法,即将值输出到参数,例如@retval
  x6 d0 ]2 g! O0 Z9 |( X# W1 QOUTPUT甚至如何存储它在具有ID的临时表中,以便以后可以运行单独的更新。" |: f7 E  z. V
从学习的角度来看,知道如何使用@retval OUTPUT设置参数以及如何直接更新表将是一件好事。谁能说清楚我现在哪里错了,因为现在变得绝望了。
$ T8 K. ~1 @# U! p8 }7 V  CREATE TABLE [dbo].[Test_Run](
( c$ i8 u, O3 H$ n1 x    [ID] [int] IDENTITY(1,1) NOT NULL,
1 {. u7 i% @2 Q- }2 p8 M$ y6 ]    [Name] [nvarchar](250) NULL,+ G) S( ?7 m) f% ?# o3 Z
    [Script] [nvarchar](max) NULL,
; r9 E. g* W. B  m    [Last_Result] [nvarchar](100) NULL,
# C/ K: t4 g! u; }1 c    [Last_Runtime] [datetime] NULL
1 B' p) L; Q! ]) g, o) iCONSTRAINT [PK_ID] PRIMARY KEY CLUSTERED 5 o0 E4 z  P; o3 Q8 |7 z
(
- d9 X( S3 l8 o# U, \& z6 n! M    [ID] ASC
' L$ \; v2 g# d. Y4 M)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
: ^1 B- Y0 T# U# z' E" Y4 d) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
- \# s# d' K9 j& O/ ]/ vdeclare @cursor nvarchar(4000)& N% R' g; T) x: Z& v3 E
set @cursor =
6 {  l# a( w% q, Q+ {7 f; K'declare c_tables cursor fast_forward for
6 ~# V2 r% k4 Z& Lselect distinct
% f; x8 {! H  s6 v" a    ID,6 A$ j9 E% r* T1 L% R- W& H
    Name,
: L, E3 b# C/ v9 J) Q$ D3 l    Script
+ ?3 I$ V' g. v6 s& u: lfrom Test_Run
* W* p! @& T3 n- ]' Uorder by ID asc8 |1 u, `  P7 b* Y3 h  j
'7 t9 x: q! f' c* C1 a' J! a
exec sp_executesql @cursor
- {) }' t$ n3 K' o5 s/ dopen c_tables( A9 g7 S. q% K' V# C) k
    declare @ID varchar(2),
  N, Q4 P$ o# P! ^% U            @Name varchar(35),2 S# \( X6 K: |/ R
            @Scripts nvarchar(3000),
- r. c. T) b3 R) J6 r! @            @Result as varchar(10),
" Z- g+ U6 {# v, @  b% n. E            @ParmDefinition nvarchar(500),$ h% f  `* N; ~+ u' Z) L
            @retval as varchar(10)/ b% z0 e7 N8 O0 n
SET @ParmDefinition = N'@retvalOUT int OUTPUT';6 v; t2 B" X- e
fetch next from c_tables into @ID, @Name, @Scripts
2 o, h: k! o: m4 H! a; qwhile @@fetch_status = 07 U4 ]6 C" N6 x# Z# l) G
begin- ^- Z7 X" S) D3 ]
-- insert into Test_Run(Last_Result)- Y7 b5 n1 s( o: G  Q+ k
exec sp_executesql @Scripts, N'@ID',@ID;--,@ParmDefinition, @retvalOUT=@retval OUTPUT;8 m% {0 h5 }+ R/ T/ J" i
-- select @retval. m; C) _0 h, y- U% Y; Q% v
fetch next from c_tables into @ID, @Name, @Scripts/ V9 B% q  G5 S) t8 t6 I
end9 J+ e( o8 j/ q6 w
close c_tables
7 [2 V) P1 Q9 u2 R& Zdeallocate c_tables+ s* \' H2 w, H, _
               
1 A! x" N4 G+ J* N. [  n解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则