【发布时间】:2012-05-24 14:29:26
【问题描述】:
我想创建一个动态更新查询,我需要在列中设置某个值。但是需要从另一个表中选择列名。 我已经有以下查询:
UPDATE core.TableRes
SET (
SELECT Code FROM core.TableFields
INNER JOIN core.TableXTableFields ON TableXTableFields.FieldID = TableFields.FieldID
INNER JOIN core.TableResRefLinks ON TableResRefLinks.ExtraFieldID = TableXTableFields.ExtraFieldID
WHERE TableResRefLinks.TableResRefLinksID = RefLinks.TableResRefLinksID)
= (
SELECT Value FROM core.TableResRefLinks WHERE TableResRefLinksID = RefLinks.TableResRefLinksID)
FROM core.TableRes
INNER JOIN core.TableResRefLinks RefLinks ON RefLinks.ResourceID = TableRes.ResourceID
INNER JOIN core.TableXTableFields ON TableXTableFields.ExtraFieldID = RefLinks.ExtraFieldID
INNER JOIN core.TableFields ON TableFields.FieldID = TableXTableFields.FieldID
WHERE (EndDate IS NULL OR EndDate > GETDATE()) AND
(
SELECT Code FROM core.TableFields
INNER JOIN core.TableXTableFields ON TableXTableFields.FieldID = TableFields.FieldID
INNER JOIN core.TableResRefLinks ON TableResRefLinks.ExtraFieldID = TableXTableFields.ExtraFieldID
WHERE TableResRefLinks.TableResRefLinksID = RefLinks.TableResRefLinksID)
<>
(
SELECT Value FROM core.TableResRefLinks
WHERE TableResRefLinksID = RefLinks.TableResRefLinksID)
它给了我以下错误:
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '('.
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '='.
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'FROM'.
Msg 102, Level 15, State 1, Line 14
Incorrect syntax near '<'.
有没有办法解决这个问题?如果我更改完整的 UPDATE 和 SET 语句并用 SELECT * 替换它们,我会得到结果。
编辑
以下是数据类型
TableFields.Code => nvarchar(100)
TableResRefLinks.Value => sql_variant
并且列名称为 TableFields.Code 的列的数据类型设置为 sql_variant
【问题讨论】:
-
AFAIK 您无法通过选择查询动态确定要更新的字段。此外,您无法使用这样的 select 语句检索其值,因为您最终可能会遇到这样一种情况:查询会尝试使用从 select 返回的多个值填充一个字段。
-
好的,谢谢您的澄清。我在创建 UPDATE 查询的地方创建了一个 SELECT,然后我可以轻松地运行所有这些查询。
标签: sql sql-update inner-join