首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用select语句的变量运行update

问尝试使用select语句的变量运行update
EN

Stack Overflow用户
提问于 2014-06-19 08:03:58
回答 2查看 24关注 0票数 0

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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2014-06-19 08:13:50

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

你应该做的是

代码语言:javascript
复制
DECLARE @sql2 VARCHAR(50) = EXEC '(select CONVERT(VARCHAR, SUM(size)) FROM ' 
                                  + @TempCaseArtifactID 
                                  + ' where TYPE = 3 and InRepository = 1)'

然后

代码语言:javascript
复制
IF (select BR_sqlServerID from #BRFindSizes where UpdateCompleted = '2') = 1015083
BEGIN
    UPDATE #BRFindSizes
    SET BR_ProductionSize = @sql2
    WHERE UpdateCompleted = '2'
END

@TempCaseArtifactID也是如此。

票数 0
EN

Stack Overflow用户

发布于 2014-06-19 08:16:43

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

你有这样的(实际上,我放在SumOfSizes别名中):

代码语言:javascript
复制
set @sql2 = '(select SUM(size) SumOfSizes
FROM '+@TempCaseArtifactID + ' 
where TYPE = 3 and InRepository = 1)'

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

代码语言:javascript
复制
set @valueIWant = SumOfSizes from 
sp_executesql @SQLString @sql2

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

要获得正确的语法,请使用read this。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24296838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档