我有一个用于处理数据问题的表,其中包含识别该问题的代码,还有一个单独的表,其中包含影响数据的行数,我想做的是使用脚本(示例代码)来更新当前数字行数(第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中是不可接受的。有办法解决吗?
答案 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