Я следующую задачу:Неверное имя объекта в запросе с ДЕЛУ
У меня есть 3 таблицы:
Если вы хотите, чтобы создать документ, есть два варианта:
- Вы может создать документ с нуля.
- Программа создаст запись в таблице Config с настройкой по умолчанию.
- В этом случае 1 Config записи принадлежит ровно 1 Документ записи
- Вы можете создать документ из DocumentTemplate
- DocumentTemplate позволяет заранее определить конфигурации документа, где вы можете основывать документы на.
- Программа свяжет новую запись в таблице Document с той же записью конфигурации, что и запись конфигурации DocumentTemplate.
- 1 Config рекорд принадлежит именно 1 DocumentTemplate запись и принадлежит 0 .. * записи документов
Если вы никогда не создали шаблон, таблица «DocumentTemplate» не будет существовать в базе данных.
Теперь я хочу, чтобы выбрать следующие столбцы:
- Config.config_data
- Document.document_name ИЛИ DocumentTemplate.template_name
- Если конфигурации создается шаблон, я хочу DocumentTemplate.template_name
- Else Я хочу 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 не существует.
Msg 208, Level 16, State 1, Line 1
Неверное имя объекта 'DocumentTemplate'.
Как я могу переписать этот запрос в соответствии с моими требованиями?
заранее спасибо
«Если вы никогда не создавали шаблон, таблица« DocumentTable »не будет существовать в базе данных». - это ВЫСОКО необычный дизайн. База данных приложения без данных определенного типа должна иметь * пустую * таблицу, а не * таблицу без изменений *! – AakashM
(+1 @Aakashm) Извините, я имею в виду 'DocumentTemplate' вместо' DocumentTable'. Но я согласен. Я использую структуру, поэтому я должен принять этот дизайн. – hwcverwe