-1
我想创建一个动态更新查询,我需要在列中设置一个特定的值。但是列名需要从另一个表中选择。 我已经下面的查询:动态更新语句
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 *,我会得到结果。
EDIT
下面是数据类型
TableFields.Code =>为nvarchar(100)
TableResRefLinks.Value => SQL_VARIANT
以及具有作为列名TableFields.Code的列的数据类型被设定为SQL_VARIANT
AFAIK您无法通过选择查询动态确定要更新的字段。另外,你不能用这样的select语句检索它的值,因为你最终可能会在查询尝试从select中返回多个值的情况下填充一个字段。 –
好的,谢谢你的澄清。我创建了一个SELECT来创建UPDATE查询,然后我可以轻松地运行所有这些查询。 – TimVK