通过从表中的单元格运行脚本来分配变量

时间:2019-02-14 10:42:38

标签: sql-server

我有一个用于处理数据问题的表,其中包含识别该问题的代码,还有一个单独的表,其中包含影响数据的行数,我想做的是使用脚本(示例代码)来更新当前数字行数(第1周)

我已经建立了一个循环,因此它将从该单元格中提取脚本并将其分配给变量。为了获得输出,我通常只执行变量,但是由于我要更新变量,所以我试图使它改变week1的详细信息,但是尝试使用exec进行任何操作时都会遇到语法问题,而不仅仅是执行

declare @srow int, @erow int, @example varchar(max)

set @srow = 1
set @erow = (select max(id) from @log)

while @srow <= @erow
BEGIN

set @example = (select ExampleCode from @DQLog where ID = @srow)

update @log
set Week1 = exec (@example)
where id = @srow

set @srow = @srow + 1

END

@example应该设置为examplecode脚本,然后execute给出结果并将其分配给week1列,但这在mssql中是不可接受的。有办法解决吗?

2 个答案:

答案 0 :(得分:0)

更好地了解了您的问题。这是执行代码的方式。

execute sp_executesql @examplecode;

答案 1 :(得分:0)

您不能使用exec从选择中返回值。一种方法是使用临时表保存该值,例如:

declare @srow int, @erow int, @example varchar(max)

set @srow = 1
set @erow = (select max(id) from @log)

CREATE TABLE #tmp(ID INT)


while @srow <= @erow
BEGIN

set @example = select ExampleCode from @DQLog where ID = @srow

TRUNCATE TABLE #tmp

INSERT INTO #tmp
EXEC @example

update @log
set Week1 = (SELECT TOP 1 ID from #tmp)
where id = @srow

set @srow = @srow + 1

END

如果您已修改表中的脚本以使其返回变量,例如:

set @example = 'select @ExOut = ExampleCode from @DQLog where ID = ' + CAST(@srow as varchar(5))

您可以使用sp_executeSql将该值返回给变量:

DECLARE @nOut int
EXEC sp_executesql @example, N'@ExOut int OUTPUT', @ExOut = @nOut OUTPUT