Столбец "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