在SQL Server中使用一个表或另一个表创建视图

时间:2020-05-04 22:06:26

标签: sql-server sql-server-2017

我正在尝试创建一个在表之间进行选择以选择记录的视图。这是我要编写的查询。

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语句。只是我无法使其与视图一起使用。有人可以建议我在这里做错什么吗,还是可以尝试其他方法?

1 个答案:

答案 0 :(得分:0)

类似的方法可能对您有用:

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')                      
相关问题