Как создать UDF, который принимает строку запроса и возвращает набор результатов запроса - PullRequest
0 голосов
/ 24 апреля 2009

Я хочу создать хранимую процедуру, которая принимает простой оператор SELECT и возвращает набор результатов в виде строки CSV. Таким образом, основная идея состоит в том, чтобы получить оператор sql из пользовательского ввода, запустить его с помощью EXEC (@stmt) и преобразовать набор результатов в текст с помощью курсоров. Однако SQLServer не позволяет:

  • выбор * из хранимой процедуры (@sqlStmt)
  • UDF с EXEC (@sqlStmt)

, поэтому я попытался вставить в #tempTable EXEC (@sqlStmt), но это не сработало (ошибка = "неверное имя объекта #tempTable").

Я застрял. Не могли бы вы пролить свет на этот вопрос?

Большое спасибо

EDIT:

На самом деле вывод (например, строка CSV) не важен. Проблема в том, что я не знаю, как назначить курсор на набор результатов, возвращаемый EXEC. SP и UDF не работают с Exec (), в то время как создание временной таблицы перед тем, как вставить значения, невозможно без знания оператора ввода.

Я думал об OPENQUERY, но он не принимает переменные в качестве своих параметров.

Ответы [ 2 ]

0 голосов
/ 19 мая 2009

Если я не ошибаюсь, вам нужна хранимая процедура, которая принимает оператор SELECT и возвращает результаты, необязательно в виде CSV.

Итак, EXEC prExecute 'select * from tablea' - это то, что вы хотели бы назвать? Это довольно восточно:

CREATE PROC prExecute ( @sql varchar(2000))
AS
    EXEC (@sql);
GO

Но я не понимаю необходимости курсора здесь.

0 голосов
/ 24 апреля 2009

Вам нужно создать временную таблицу с теми же столбцами, что и хранимый процесс, перед вставкой в ​​него.

Однако вывод в CSV не похож на работу, особенно подходящую для SQL. Вы ограничены в том, чтобы делать это с сохраненным процессом, или вы можете написать скрипт или программу для получения результатов и сохранения в CSV? Вероятно, это был бы более простой подход.

...