2012-04-20 11 views
1

をCREATE:私は私の構文は次のように約あるSQL Serverで2000 をSQL Serverの機能を作成してい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

更新:あなたはインライン表関数をしたい場合は
ある唯一のselect文である必要があります。

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

@Mikael Erikssonありがとうございました。それは解決されました。 しかし、返されたテーブル(@returntable)を宣言して、最初に結果を得る必要がありますか? 代わりに、2つの変数(2列として)を選択したいだけです。 別のパターンはありますか?事前に感謝します –

+0

私はインラインバージョンで答えを更新しました。それが唯一の選択肢です。関数内に複数のステートメントが必要な場合は、リターンテーブルを宣言する必要があります。 –

+0

あなたのお手伝いをしてくれてマイク。私はそれを実現しました:) –