我正在尝试创建一个在表之间进行选择以选择记录的视图。这是我要编写的查询。
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语句。只是我无法使其与视图一起使用。有人可以建议我在这里做错什么吗,还是可以尝试其他方法?
答案 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')