Столбец "time_stamp" слишком неоднозначный

Я уже провел довольно много поисков в Google по этой теме, и я знаю, что это повторяющаяся проблема. Тем не менее, вот мой запрос:

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 ответа

Решение

Я собираюсь сделать предположение из прошлого раза, когда я столкнулся с чем-то похожим (иш). Конструктор представлений для 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

Полный приказ после предложения Мэтьюса:

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
Другие вопросы по тегам