我已经完成了很多关于这个主题的谷歌搜索,我知道这是一个重复的问题。但是,这是我的查询:
SELECT
i.tag_name, i.value, i.aggregate_id, i.aggregate_interval, i.time_stamp
FROM
OPENQUERY(odbcclient,
'Select
time_stamp, tag_name, value,
aggregate_id, aggregate_interval
from
canarydata.data
where
aggregate_id = ''TimeAverage2''
and aggregate_interval = ''1:00:00:00''
and tag_name LIKE ''%SearchVal%'''
) AS i
当我运行此查询时,它执行正常。一旦我尝试将其创建到视图中,我收到以下错误消息:
错误来源:.Net SqlClient数据提供者
错误消息:找不到列“time_stamp”或用户定义的函数或聚合“time_stamp.ToString”,或者名称不明确。
如何重写查询以在视图中运行?
此外,从脚本执行此操作与在视图中执行此查询之间的区别是什么?
答案 0 :(得分:5)
我将从上次遇到类似的东西(ish)时做出猜测。 SQL Server的视图设计器将在数据库支持的某些内容上失败,我相信在视图设计器中使用openquery
的方面就是其中之一。
如果我是正确的(并且您还没有尝试像下面那样编写脚本),您应该可以通过直接编写脚本来创建视图,例如:
CREATE VIEW dbo.myView AS
SELECT i.tag_name, i.value, i.aggregate_id,
i.aggregate_interval, i.time_stamp
FROM OPENQUERY(odbcclient,
'Select time_stamp, tag_name, value,
aggregate_id,aggregate_interval
from canarydata.data
where aggregate_id = ''TimeAverage2''
and aggregate_interval = ''1:00:00:00''
and tag_name LIKE ''%SearchVal%''')
AS i
GO
答案 1 :(得分:0)
Matthews建议后的完整命令:
USE [ODBC]
GO
/****** Object: View [dbo].[Averages] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE View [dbo].[Averages] AS
SELECT i.time_stamp, i.tag_name, i.value,
i.aggregate_id, i.aggregate_interval
FROM OPENQUERY(odbcclient,
'Select time_stamp, tag_name, value,
aggregate_id, aggregate_interval
from data.data
where aggregate_id = ''TimeAverage2''
and aggregate_interval = ''1:00:00:00''
and tag_name LIKE ''%Point%''')
AS i
GO