【发布时间】: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