2012-03-12 11 views
0

私は不正な構文が出ているのはなぜですか?sqlスクリプトには文がラップされている必要があります

更新:

GO 

IF EXISTS (SELECT TOP 1 * FROM Customers) 
    BEGIN 
     USE [rstestDB] 

     SET ANSI_NULLS ON 

     SET QUOTED_IDENTIFIER ON 

     CREATE FUNCTION [dbo].[udf_GetName] 
     (
      @p1 nvarchar(25) 
     ) 
     RETURNS varchar 
     AS 
     BEGIN 
      DECLARE @Result varchar(25) 
      SELECT @Result = 'John Doe' 
      RETURN @Result 
     END 
    END 
GO 

取得、次のエラー: メッセージ156、レベル15、状態1、行10 キーワード '関数' の近くに不正な構文。 メッセージ178、レベル15、状態1、行19 戻り値を持つRETURNステートメントは、このコンテキストでは使用できません。

+0

あなたは '' INT 'に '' John Doe''を設定しようとしています – diaho

+0

ありがとう、更新しました。それでも問題は残っています。 GOと何か関係がありますか? IFチェックBEGINを削除してスクリプトを終了させて​​も問題ありません。それは私が下検分を導入するまでではありません – Rod

+0

@rodそれは、以下の私の答えを見てください。 – JNK

答えて

5

GO is a batch separator.

GOそれが有効なSQLではありません、SQLエンジンにコマンドを送信SQLCMDとのosqlユーティリティで認識されたコマンドです。

最後を除いてGOをすべて取り除いてください。

も失敗します。シンプルな例:

IF 1=1 
BEGIN 
SELECT 'FOO' 
GO 
END 

を、彼らはセッションの長さが持続しますので、あなたのすべての設定は、本当にスクリプトの先頭に指定する必要があります。