这是在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发布于 2014-06-19 08:13:50
您必须对创建的动态语句执行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也是如此。
发布于 2014-06-19 08:16:43
这个答案未经测试,可能有一些语法错误,但它代表了您想要做的事情的要点。
你有这样的(实际上,我放在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。
https://stackoverflow.com/questions/24296838
复制相似问题