【发布时间】:2017-03-04 01:06:43
【问题描述】:
我正在尝试使用动态 sql 根据字段选择值。我有一个用于列名的字段引用表。我遇到的问题当然是动态 sql。例如,我的返回结果是(SELECT ecoa_code FROM CRA_METRO2_BASE WHERE id = 568470)。但我真的希望它运行该选择语句。执行只返回最后一行。
DECLARE @BaseCol VARCHAR(250)
SELECT
@BaseCol = '(SELECT ' + FR_base.field_name + ' FROM CRA_METRO2_BASE WHERE id = ' + CONVERT(VARCHAR(15), B.id) + ')'
FROM CRA_INNOVIS_AUDIT_ERROR_FIELDS E
LEFT JOIN CRA_METRO2_BASE B
ON B.id = E.base_id
LEFT JOIN CRA_METRO2_FIELD_REF FR_base
ON FR_base.id = E.base_field_ref
WHERE E.audit_id = @audit_id
EXEC(@BaseCol)
【问题讨论】:
-
不能那样做。你甚至不知道它是一个有效的列名。它可以逐行更改。
-
除非我将它加入到我的 Field_Ref 表中,该表将包含我选择的字段。立即编辑帖子。
-
不,该表将没有该字段。该表将有一些文本(char,varchar) - 没有列的数据类型。查询优化器不能使用任何查询的输出来构建查询。
-
是的,它会有列名的文本。有没有办法执行它产生的那一行?或者我可以采取更好的路线。
-
你可以去 MSDN 了解动态 sql 的工作原理。现在你只是在使用这个词。
标签: tsql dynamic-sql