2017-08-02 13 views
-1

機能を作成しようとしています。SQL Server Management Studioのテーブル値関数を使用するQUERY

CREATE FUNCTION tedata 
    (@teacher_name[nchar] NOT NULL) 
RETURNS @st TABLE 
      ([stu_id] [int] NOT NULL, 
      [stu_nam] [varchar](255) NULL, 
      [stu_dob] [date] NULL, 
      [stu_add] [varchar](255) NULL, 
      [org] [nvarchar](max) NULL, 
      [org_id] [char](10) NULL) 
AS 
BEGIN 
    DECLARE @teacher_id [nvarchar] NOT NULL 

    INSERT INTO @st 
     SELECT stu_id = @teacher_id 
     FROM dbo.[teacher]; 

    RETURN 
END 
GO 

ERROR:

Msg 102, Level 15, State 1, Procedure tedata, Line 16 [Batch Start Line 20]
Incorrect syntax near 'NOT'.

私は上記のエラーを取得しています。

+0

あなたは本当にあなたのキャラクタータイプに長さを入れたいと思う。 1つを指定せずに、 "デフォルト"(1、30、または他の何があるかを知る)を得ることは、[悪い習慣]です(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/ bad-habits-to-kick-declaring-varchar-without-length.aspx)が含まれています。 –

+0

[蹴り癖がない:VARCHAR/NCHARを宣言しない(長さ)](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without -length.aspx)** **常に** varcharの変数とパラメータの長さを指定してください。\t - それ以外の場合は、デフォルトで** 1文字の長さになります** ..... –

答えて

0

あなたの関数定義は問題です:

CREATE FUNCTION tedata 
    (@teacher_name[nchar] >>NOT NULL<<) 

NULLでない関数パラメータの有効な修飾子ではありません。それを削除し、あなたの関数は正常に動作するはずです。

0

投稿したコードは意味がありません。私はこれがあなたの後になったものだと思う "と思う。

CREATE FUNCTION dbo.tedata 
(
    @teacher_name NVARCHAR(50) 
) 
RETURNS TABLE WITH SCHEMABINDING AS 
RETURN 
    SELECT 
     t.stu_id, 
     t.stu_man, 
     t.stu_dob, 
     t.stu_add, 
     t.org, 
     t.org_id 
    FROM 
     dbo.teacher t 
    WHERE 
     t.teacher_name = @teacher_name; 
GO 
関連する問題