尝试使用select语句的变量运行更新

时间:2014-06-19 00:03:58

标签: sql database variables sql-update

这是在SQL Server 2012中。我在Sever Management studio上。 我有多个服务器,有多个数据库,我需要提供一个不同的数据库名称列表,以拉回一个大小字段的总和。目前@ sql2将BR_ProductionSize更新为实际的select语句,而不是该语句的答案。

DECLARE @TempCaseArtifactID NVARCHAR(60)
DECLARE @sql2 NVARCHAR(200)
DECLARE @answer NVARCHAR(200)
set @TempCaseArtifactID = (select '[EDDS'+BR_CaseArtifactid+'].[EDDSDBO].[File]' from #BRFindSizes where UpdateCompleted = '2') 
set @sql2 = '(select SUM(size) FROM '+@TempCaseArtifactID + ' where TYPE = 3 and InRepository = 1)'

IF (select BR_sqlServerID from #BRFindSizes where UpdateCompleted = '2') = 1015083
Begin
 update #BRFindSizes
set BR_ProductionSize = @sql2
where UpdateCompleted = '2'
end

2 个答案:

答案 0 :(得分:0)

您必须Execute您创建的动态语句,才能使用生成的值。

你应该做的是

DECLARE @sql2 VARCHAR(50) = EXEC '(select CONVERT(VARCHAR, SUM(size)) FROM ' 
                                  + @TempCaseArtifactID 
                                  + ' where TYPE = 3 and InRepository = 1)'

然后

IF (select BR_sqlServerID from #BRFindSizes where UpdateCompleted = '2') = 1015083
BEGIN
    UPDATE #BRFindSizes
    SET BR_ProductionSize = @sql2
    WHERE UpdateCompleted = '2'
END

同样适用于@TempCaseArtifactID

答案 1 :(得分:0)

这个答案未经测试,可能有一些语法错误,但它代表了你想要做的事情的要点。

你有这个(实际上,我输入了SumOfSizes别名):

set @sql2 = '(select SUM(size) SumOfSizes
FROM '+@TempCaseArtifactID + ' 
where TYPE = 3 and InRepository = 1)'

这是一个字符串。对于该值,您必须执行该查询并将结果放入变量中。这是一般的想法。

set @valueIWant = SumOfSizes from 
sp_executesql @SQLString @sql2

然后在更新查询中使用@valueIWant变量。

正确的语法read this