【发布时间】:2017-05-10 19:22:34
【问题描述】:
我有一个名为Employee.emp.Language 的表,其中包含一个可以在 UI 上选择的语言列表。我无法向此表添加记录,也无法直接编辑 UI 来解决我的问题。
我需要在我的查询中添加一个选项,将NULL 添加到我的结果集中。这实际上将允许用户从下拉列表中选择null。
DECLARE @nulls AS TABLE (fieldLabel VARCHAR(10) NULL, fieldValue VARCHAR(10)
NULL)
INSERT INTO @nulls( fieldLabel, fieldValue )
VALUES ('NULL', NULL )
SELECT
(
SELECT LanguageName AS FieldLabel,
LanguageID AS FieldValue
FROM Employee.emp.Language
WHERE IsRetired = 0
UNION
SELECT fieldLabel ,
fieldValue
FROM @nulls
FOR XML PATH ('options'), ELEMENTS, TYPE, ROOT ('languages')
)
虽然我的列表包含要在我的下拉列表中选择的 null 选项,但我无法将这段代码保存到我的存储过程中。
我得到的错误是:The FOR XML clause is invalid in views, inline functions, derived tables, and subqueries when they contain a set operator. To work around, wrap the SELECT containing a set operator using derived table syntax and apply FOR XML on top of it.
只要我删除 union 和它后面的 select,一切正常。
如果不直接将值添加到表中,我还能如何完成向结果集添加值?
【问题讨论】:
-
为什么必须为 'NULL'。 NULL = 未知。您可以在 Employee.emp.Language 表中插入一条记录,其中 LanguageName = 'Unknown'。
-
@Wendy - 我无法通过添加此记录来修改源表。我正在为一个小变通方法设计一个解决方案,在该解决方案中,其他 99% 的时间,NULL 不会是一个可选的选项,也不会出现在列表中。
标签: sql sql-server sql-server-2008 tsql stored-procedures