【问题标题】:Create a view using one table or another in SQL Server在 SQL Server 中使用一个或另一个表创建视图
【发布时间】:2020-05-04 22:06:26
【问题描述】:

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

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 语句在单独的查询中工作。只是我无法让它与视图一起工作。任何人都可以建议,我在这里做错了什么,或者我可以尝试任何其他方法吗?

【问题讨论】:

  • 你标记 SQL Server 2008(已经完全不支持将近一年了),但是,使用 CREATE OR ALTER,直到更新的 SQL Server 版本才引入。您实际使用的是什么版本?
  • 请解释使用表1还是表2背后的逻辑-是否像表是否存在一样简单?
  • 至于你想要做什么,如果EXISTS 子句不正确,VIEW 将失败。您不能引用查询中不存在的对象。这似乎是XY Problem
  • 如果这真的是你的逻辑,你不能创建视图,你唯一的选择是使用动态 SQL 的存储过程。
  • 好吧,您现在已经标记了 2014 年,但是,直到 2016 才引入 CREATE OR ALTER...您应该真正了解您正在使用的 SQL Server 版本。我建议运行PRINT @@VERSION;

标签: sql-server sql-server-2017


【解决方案1】:

这样的事情可能对你有用:

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')                      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多