【问题标题】:SET inside UPDATE Statement in MSSQL not workingMSSQL中的UPDATE语句中的SET不起作用
【发布时间】:2016-04-13 06:59:04
【问题描述】:

这是查询

DECLARE @tempvarA INT = 0
UPDATE Table1 SET @tempvarA = 1 + intColumn, columnA = @tempvarA

*intColumn 是 Table1 中的一列 它成功执行了查询,但 columnA 的值为 0,其中最初声明了 @tempvarA。我在这里遗漏了什么还是@tempvarA 的值仅在执行更新语句后更新?

我尝试了以下方法:

DECLARE @tempvarA INT = 0
UPDATE Table1 SET @tempvarA = 1 + intColumn
UPDATE Table1 SET columnA = @tempvarA

它有效,但不知何故,我认为应该有更合适的方法来做到这一点。

【问题讨论】:

  • 您不必发出UPDATE 来更改变量的值。只需简单地使用SET @tempvarA = 1
  • 你使用的是哪个版本的sql server?
  • 在 sql server 2000 中运行良好。
  • 很抱歉,我忘了说我需要表格中的一些东西来使用@tempvarA 进行计算。我稍后会编辑它。

标签: sql-server set declare


【解决方案1】:

因此,如果我正确理解了您的问题,首先您要声明一个变量并为其设置一个值,然后使用该变量更新列的值。让我们一步一步来:

1)声明变量:

DECLARE @tempvarA INT;

2)设置变量:

SET @tempvarA = 1;

3)使用所述变量更新表:

UPDATE Table1 SET columnA = @tempvar1;

不过要小心。以上会将columnA 的所有值更新为tempvarA 的值。如果您想要特定的行,则必须在 UPDATE 语句中添加 where 子句。

【讨论】:

  • 嗨!,是的,你的答案很明确!但我不能执行第 2 步),因为我需要 Table1 中的一列作为我对 tempvarA 的计算的一部分。类似于 Set tempvarA = 1 + Table1.intColumn。将 tempvarA = 1 + Table1.intColumn 放在 UPDATE 语句中似乎不起作用
  • 您也可以接受它作为正确答案吗?非常感谢!
【解决方案2】:

对于

DECLARE @tempvarA INT = 0
UPDATE Table1 SET @tempvarA = 1, columnA = @tempvarA

你可以试试

DECLARE @tempvarA INT = 0
UPDATE t SET @tempvarA = 1, t.columnA = @tempvarA from My_Table_Name t

这对我来说很好。

【讨论】:

  • 您好,谢谢!它正在工作,我发现原因来自其他原因,即我的 Case 语句没有正确返回 tempvarA
猜你喜欢
  • 1970-01-01
  • 2017-06-10
  • 2018-09-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 2018-01-24
相关资源
最近更新 更多