【发布时间】:2020-06-09 14:00:54
【问题描述】:
我有一个存储过程,我从表中获取数据库名称,然后尝试从该数据库名称创建动态查询并获取结果。获取结果后,我需要循环这些结果以执行进一步的查询以获得所需的结果
USE DATABASE1
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [User].[update_client_details]
AS
DECLARE @clientdata CURSOR,
@clientid INT,
@SQL NVARCHAR(2000),
@uid INT,
@isFirst INT,
@isTemp INT,
@inactive INT,
@createdDate Date
BEGIN
DECLARE C CURSOR LOCAL FOR
SELECT clientuserid FROM USER.queen_client
OPEN C
FETCH NEXT FROM C INTO @clientid
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = N'SELECT userid, @isFirst=isfirst, @isTemp=istemp, @inactive=inactive, @createdDate=createddate FROM ' +QUOTENAME(@clientid)+'.USER.queen_user;';
EXEC sys.sp_executesql @SQL, N'@inactive int OUTPUT, @uid int OUTPUT, @isFirst int OUTPUT, @isTemp int OUTPUT, @createdDate date OUTPUT', @inactive OUTPUT, @uid OUTPUT, @isFirst OUTPUT, @isTemp OUTPUT, @createdDate OUTPUT;
// @SQL returns multiple rows - I need to loop the output of @SQL
// UPDATE QUERY BASED ON IF CONDITION COMES HERE
FETCH NEXT FROM C INTO @clientid
END
CLOSE C
DEALLOCATE C
END
由于 SQL 查询是动态的 - 我如何循环此动态查询的输出。
【问题讨论】:
-
该动态语句不是我之前给您的查询,该动态语句也不起作用,您无法在为变量赋值的同一查询中返回数据集。另外,您没有在
sp_executesql中定义@isFirst。 -
@Larnu 是的,我修改了这些字段。那么如何循环数据集呢?
标签: sql sql-server stored-procedures sql-server-2016 sql-server-2016-express