Создайте представление, используя ту или иную таблицу на SQL сервере - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь создать представление, которое выбирает между таблицами для выбора записей. Вот вопрос, который я пытаюсь написать.

CREATE OR ALTER VIEW vwTable2
AS
SELECT (CASE WHEN EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tbl2')
            THEN(SELECT fldKey, fldValue, fldDivRef
                    FROM tbl2
                    WHERE fldKey IN ('key1','key2','key3'))
            ELSE(SELECT fldKey, fldValue, 
                        CASE ISNUMERIC((PARSENAME(REPLACE(fldkey,':','.'),1)))
                            WHEN 1 THEN (PARSENAME(REPLACE(fldkey,':','.'),1))
                            ELSE -1
                        END AS fldDivRef
                FROM tbl1
                WHERE fldKey LIKE 'key1%' OR 
                        fldKey LIKE 'key2%' OR
                        fldKey LIKE 'key3%' OR)
        )
FROM sys.sysobjects

Я подумал, что sys.sysobjects не будет работать. Я просто привел его для справки, чтобы показать, что я пытался сделать.

Я получил инструкции select и case, работающие в отдельном запросе. Просто не могу заставить работать с view. Может ли кто-нибудь подсказать, что я здесь делаю неправильно, или есть ли другой подход, который я могу попробовать?

1 Ответ

0 голосов
/ 05 мая 2020

У вас может сработать что-то вроде этого:

CREATE OR ALTER VIEW vwTable2
AS
SELECT fldKey, fldValue, fldDivRef
FROM tbl2
WHERE fldKey IN ('key1','key2','key3')
    AND EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tbl2')

UNION ALL

SELECT fldKey, fldValue, 
    CASE ISNUMERIC((PARSENAME(REPLACE(fldkey,':','.'),1)))
        WHEN 1 THEN (PARSENAME(REPLACE(fldkey,':','.'),1))
        ELSE -1
    END AS fldDivRef
FROM tbl1
WHERE (fldKey LIKE 'key1%' OR 
    fldKey LIKE 'key2%' OR
    fldKey LIKE 'key3%')
    AND NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tbl2')                      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...