【发布时间】:2015-10-27 21:37:58
【问题描述】:
让我添加更详细的问题并重新表述我的问题,因为我在下班时匆匆写下它:
首先是表格:
表 A 与表 B 是 1:1 的关系
TABLE A 与 TABLE XYZ(我们要更新的表)具有 1:M 关系
我有一个名为 sp_parent 的存储过程,它调用另一个名为 sp_update_child 的存储过程(所以主要功能是更新表)
在我的 sp_update_child 中,我有一个这样的变量集:
SET @trustee_variable_id = SELECT TOP 1 ID_A
FROM TABLE A
WHERE clause1 AND clause2 AND etc
它返回一个 ID,比如 3000
然后进入更新语句:
UPDATE TABLE_XYZ
SET TABLE_XYZ.trustee_id = (@trustee_variable_id = TABLE_XYZ.trustee_id`
但是,它无法更新,因为从表 A 中检索到的 ID 3000 不在表 B 中,并且更新该特定列的唯一方法是如果 ID 3000 在表 B 中。
如果从 TABLE A 检索到的 ID 不在 TABLE B 中,我如何添加一个检查,然后使用已在 trustee_id 列中的原始 ID 更新 TABLE_XYZ.trustee_id?
以下是我的脚本 - 不确定我是否朝着正确的方向前进:
UPDATE TABLE_XYZ
SET @trustee_variable_id = CASE
WHEN @trustee_variable_id NOT IN (SELECT ID_A FROM TABLE_B)
THEN (SELECT trustee_id FROM TABLE_XYZ WHERE clause1 = clause2)
谁能指出正确的方向?
【问题讨论】:
-
这对我来说没有任何意义。为什么在不更新表时使用更新语句?通常你会使用一个 select 语句来设置一个变量。
-
@AznDevil92 嗯,这有很多问题。我将首先说 SQL 更新语句更新表中的列。那么您是要更新列还是设置变量的值?变量以“@”开头,列名不是。此外,首先发布表 XYZ、A 和 B 的模式以及一些示例数据可能会有所帮助。
-
抱歉给大家带来了困惑,我自己并没有完全理解这个查询,因为是其他 DBA 写的。但希望新问题能消除任何困惑。如果对这个问题还有任何困惑,请告诉我。
标签: sql sql-server tsql case-when