2013-09-17 3 views
0

Я не нашел способ сделать это. У меня есть большое заявление SQL, который выполняет следующие действия:Можно ли все это сделать одной функцией?

  1. проверки в течение двух временных таблиц, если найден удаляет их
  2. Объявляет локальные переменные
  3. Sets локальных переменные
  4. пробегов SQL statement1, который вставляет в # tmp1 (temp table)
  5. запускает SQL-инструкцию2, которая вставляет в # tmp2 (временная таблица)
  6. запускает SQL-инструкцию3, которая выбирает из # tmp1 и # temp2 (temp table) и возвращает исходные результаты

Выполнение этого в окне запроса работает нормально, но я хотел бы сделать одну функцию (или что-то еще), чтобы сделать то же самое.

EDIT1: Кажется, я могу вызвать функцию таблицы из excel и вернуть эти результаты, но я не могу вызывать сохраненный процесс proc из excel, я получаю сообщение об ошибке. Проблема с функцией таблицы заключается в том, что я не могу удалить (удалить) таблицы.

+3

Какая у вас проблема, когда вы кладете все это в хранимую процедуру? Он должен работать нормально. Может быть, проблема в терминологии. Вы хотите «хранимую процедуру», а не «функцию». – David

+0

Я не думал, что смогу вернуть стол, подумал, что мне нужно использовать функцию таблицы. Смогу ли я назвать это из Excel? – Baub

+0

Шаги с 4 по 6 можно свести к одному SELECT, что позволяет избежать использования временных таблиц, но здесь недостаточно информации, чтобы рассказать вам, как выглядит этот запрос. –

ответ

1
CREATE PROCEDURE dbo.OneFunction AS 

--Checks for two temp tables, if found delete them 
IF OBJECT_ID('#Frob') IS NOT NULL 
    DROP #Frob 
IF OBJECT_ID('#Grob') IS NOT NULL 
    DROP #Grob 

--Declare local variables 
DECLARE @some int; 
DECLARE @localVariables nvarchar(max); 

--Sets local variables 
SET @some = 69; 
SET @localVariables = N'Tĥḗ qᴜįċᴋ ᶀʀᴏᴡɴ ƒᴏx ᴊᴜᴍᴘěɖ ᴏᴠḝʀ' 

--runs SQL statement1 which inserts into #tmp1 (temp table) 
INSERT INTO #tep1 
SELECT 'Hi' 

--runs SQL statement2 which inserts into #tmp2 (temp table) 
INSERT INTO #tmp2 
SELECT 'Low' 

--runs SQL statement3 which selects from #tmp1 and #temp2 (temp table) and returns pivot results 
SELECT * 
FROM #tmp1 
    FULL OUTER JOIN #tmp2 ON 1=1 
PIVOT BY SOMEONE WHO KNOWS THE INSANE PIVOT SYNTAX 

Примечание: Любой код выпущен в общественное достояние. Никакой атрибуции не требуется.

+0

Ian - Я только что редактировал свой OP, чтобы включить вызов этого из excel. – Baub

Смежные вопросы