这是在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
答案 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。