2012-04-20 4 views
1

Я создаю функцию SQL Server в SQL Server 2000. Мой синтаксис примерно так:CREATE FUNCTION SQL Server 2000

ALTER FUNCTION dbo.test() 
RETURNS TABLE 
AS 
RETURN 
(
    DECLARE @A VARCHAR(100) 
    DECLARE @B VARCHAR(100) 
    SELECT @A='abc', @B='bca' 
    SELECT [email protected], [email protected] 
) 

Я пытаюсь объявить переменную и выбрать его в качестве возврата значение, но я получаю это сообщение об ошибке:

Msg 156, Level 15, State 1, Procedure test, Line 6 
Incorrect syntax near the keyword 'DECLARE'. 
Msg 170, Level 15, State 1, Procedure test, Line 10 
Line 10: Incorrect syntax near ')'. 

Кажется, он не примет объявление переменной. В чем проблема? Заранее спасибо.

ответ

3

Ваш синтаксис предназначен для функции встроенной таблицы. с несколькими утверждениями, поскольку вам нужна функция таблицы с несколькими данными.

CREATE FUNCTION dbo.test() 
RETURNS @returntable TABLE 
(
    A VARCHAR(100), 
    B VARCHAR(100) 
) 
AS 
BEGIN 
    DECLARE @A VARCHAR(100) 
    DECLARE @B VARCHAR(100) 
    SELECT @A='abc', @B='bca' 
    INSERT INTO @returntable 
    VALUES(@A, @B) 
    RETURN 
END 

CREATE FUNCTION

Update:
Если вы хотите, чтобы таблица встраиваемая функция является должен быть только один оператор выбора.

CREATE FUNCTION dbo.test2() 
RETURNS TABLE AS RETURN 
(
    SELECT 'abc' AS A, 'bca' AS B 
) 
+0

Большое спасибо @Mikael Eriksson. Он решен. Но, должен ли я объявить возвращенную таблицу (@ возвращаюсь) сначала, чтобы получить результат как то, что я хочу? Принимая во внимание, что я просто хочу выбрать 2 переменных (как 2 столбца). Есть ли другой рисунок? Заранее спасибо –

+0

Я обновил ответ с помощью встроенной версии. Это единственная альтернатива. Если вам нужно несколько операторов в вашей функции, вы должны объявить таблицу возврата. –

+0

Спасибо за помощь Майк. Я только что понял это :) –