У меня следующая проблема:
У меня есть 3 таблицы:

Если вы хотите создать документ, есть два варианта:
- Вы можете создать документ с нуля.
- Программа создаст запись в таблице конфигурации с конфигурацией по умолчанию.
- В этом случае 1 запись конфигурации принадлежит ровно 1 записи документа
- Вы можете создать документ из шаблона документа
- DocumentTemplate позволяет вам заранее задавать конфигурации документов, на которых вы можете основывать документы.
- Программа свяжет новую запись в таблице документов с той же записью конфигурации, что и запись конфигурации DocumentTemplate.
- 1 Запись конфигурации принадлежит ровно 1 записи DocumentTemplate и принадлежит 0 .. * Записи документа
Если вы никогда не создавали шаблон, таблица 'DocumentTemplate' не будет существовать в базе данных.
Теперь я хочу выбрать следующие столбцы:
- Config.config_data
- Document.document_name ИЛИ DocumentTemplate.template_name
- Если config создан с помощью шаблона, я хочу DocumentTemplate.template_name
- Остальное Я хочу Document.document_name
Я написал следующий запрос:
SELECT
-- //Name must be name of Document or name of DocumentTemplate
CASE
WHEN [c].[config_from_template] = 0
THEN -- //Get Document name
(SELECT [d].[document_name]
FROM [Document] [d]
WHERE [d].[document_config_id] = [c].[config_id])
WHEN [c].[config_from_template] = 1
AND OBJECT_ID ('[DocumentTemplate]','U') IS NOT NULL
THEN -- //Get template name
(SELECT [t].[template_name]
FROM [DocumentTemplate] [t]
WHERE [t].[template_config_id] = [c].[config_id])
END as 'Name',
configNode.value('@Key', 'nvarchar(128)') as 'ConfigKey', -- //Key from xml @Key
configNode.value('@Value', 'nvarchar(128)') as 'ConfigValue' -- //Value from xml @Value
FROM [Config] [c]
-- //Create one record for each config option
CROSS APPLY [Config].[config_data].nodes('//ConfigOptions') as ConfigNodes(configNode)
Этот запрос выдаст синтаксическую ошибку, если DocumentTemplate не существует.
Сообщение 208, Уровень 16, Состояние 1, Строка 1
Неверное имя объекта DocumentTemplate.
Как мне переписать этот запрос для удовлетворения моих требований?
заранее спасибо