Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Функция на основе OPENQUERY с параметрами  [new]
Gena928
Member

Откуда: Москва
Сообщений: 1139
День добрый,

есть запрос, который возвращает значения из другого сервера. Я запускаю его с параметрами.
-- Начальная дата
DECLARE @START_DATE DATETIME;
SET @START_DATE = CONVERT(datetime, '2012-03-01T00:00:00.000', 126);

-- Конечная дата
DECLARE @END_DATE DATETIME;
SET @END_DATE = CONVERT(datetime, '2012-03-31T00:00:00.000', 126);

-- Переменная для формирования запроса
DECLARE @SQL_REQUEST NVARCHAR(1000);

-- Формируем запрос
SET @SQL_REQUEST = 
	'SELECT *
	FROM  OPENQUERY(POSTGRES, 
	''SELECT * FROM public."repApp_dealersvisitorsdata"
		WHERE date BETWEEN ''''MY_START_DATE'''' AND ''''MY_END_DATE'''''') AS MY_TABLE';

-- Подставляем туда переменные
SET @SQL_REQUEST = REPLACE(@SQL_REQUEST, 'MY_START_DATE', CONVERT(NVARCHAR(10), @START_DATE, 121));
SET @SQL_REQUEST = REPLACE(@SQL_REQUEST, 'MY_END_DATE', CONVERT(NVARCHAR(10), @END_DATE, 121));


--PRINT @SQL_REQUEST;

-- Выполняем
EXECUTE (@SQL_REQUEST);



и я хочу сделать из него функцию. Это возможно??
CREATE FUNCTION fnc_NewFunction 
(
	@START_DATE DATETIME, 
	@END_DATE DATETIME
)
RETURNS 
@RETURN_TABLE TABLE 
(
	COL1 NVARCHAR(10), 
	COL2 NVARCHAR(10)
)
AS
BEGIN
	
	DECLARE @SQL_REQUEST NVARCHAR(1000);
	

	SET @SQL_REQUEST = 
		'SELECT *
		FROM  OPENQUERY(POSTGRES, 
		''SELECT * FROM public."repApp_dealersvisitorsdata"
			WHERE date BETWEEN ''''MY_START_DATE'''' AND ''''MY_END_DATE'''''') AS MY_TABLE';


	SET @SQL_REQUEST = REPLACE(@SQL_REQUEST, 'MY_START_DATE', CONVERT(NVARCHAR(10), @START_DATE, 121));
	SET @SQL_REQUEST = REPLACE(@SQL_REQUEST, 'MY_END_DATE', CONVERT(NVARCHAR(10), @END_DATE, 121));


	-- *********************************************************************************
	-- Вот тут вылетает ошибка и я не знаю как ее обойти
	-- Не удается перенести данные в таблицу!!!	
	-- *********************************************************************************
	INSERT INTO @RETURN_TABLE (COL1, COL2)
	SELECT [COL1], [COL2] FROM (EXECUTE (@SQL_REQUEST))
	
	RETURN 
END
GO
7 сен 12, 15:56    [13130984]     Ответить | Цитировать Сообщить модератору
 Re: Функция на основе OPENQUERY с параметрами  [new]
Glory
Member

Откуда:
Сообщений: 104751
Gena928
и я хочу сделать из него функцию. Это возможно??

В функциях запрещены динамические запросы
7 сен 12, 15:57    [13130995]     Ответить | Цитировать Сообщить модератору
 Re: Функция на основе OPENQUERY с параметрами  [new]
Gena928
Member

Откуда: Москва
Сообщений: 1139
Glory
Gena928
и я хочу сделать из него функцию. Это возможно??

В функциях запрещены динамические запросы


Жесть. Тогда без шансов.
7 сен 12, 15:58    [13131005]     Ответить | Цитировать Сообщить модератору
 Re: Функция на основе OPENQUERY с параметрами  [new]
ziktuw
Member

Откуда:
Сообщений: 3552
Технически ничто не препядствует сделать это в CRL-функции. Только подольше поковыряться придется.
7 сен 12, 16:27    [13131275]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить