“time_stamp”列太含糊了

时间:2014-02-11 15:29:14

标签: sql views

我已经完成了很多关于这个主题的谷歌搜索,我知道这是一个重复的问题。但是,这是我的查询:

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”,或者名称不明确。

如何重写查询以在视图中运行?

此外,从脚本执行此操作与在视图中执行此查询之间的区别是什么?

2 个答案:

答案 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