SQL Server存储过程创建中的语法错误

时间:2014-09-10 07:46:34

标签: sql-server tsql

我想创建一个存储过程..在创建它之前我正在检查数据库和表是否存在然后创建存储过程。我正在使用下面的SQL脚本,但它会引发语法错误。我不知道为什么失败了。

这是我得到的错误:

  

第15行,第15行,第1行,第9行   关键字'PROCEDURE'附近的语法不正确。

     

Msg 102,Level 15,State 1,Line 16
  ';'附近的语法不正确。

     

Msg 102,Level 15,State 1,Line 2
  'END'附近的语法不正确。

代码:

IF (EXISTS(SELECT TOP 1 * FROM sys.databases
           WHERE name = 'testdb1'))
BEGIN
    IF (EXISTS (SELECT TOP 1 *
                FROM INFORMATION_SCHEMA.TABLES 
                WHERE TABLE_SCHEMA = 'dbo' 
                  AND TABLE_NAME = 'TableA'))
    BEGIN 
        CREATE PROCEDURE SP_TEST
        AS
        BEGIN
            SET NOCOUNT ON;

            SELECT TableA.[Key] AS Expr1
            FROM testdb1.dbo.TableA
            ORDER BY TableA.[Key];
        END;    
        GO
    END
END

2 个答案:

答案 0 :(得分:1)

这是因为&#39 ;;'和' GO'。

使用以下脚本 -

IF (EXISTS(SELECT top 1 * FROM sys.databases
            where name = 'testdb1'))
            BEGIN
                IF (EXISTS (SELECT top 1 *
                                 FROM INFORMATION_SCHEMA.TABLES 
                                 WHERE TABLE_SCHEMA = 'dbo' 
                                 AND  TABLE_NAME = 'TableA'))
                BEGIN 
                    CREATE PROCEDURE SP_TEST
                    AS
                    BEGIN
                        SET NOCOUNT ON;
                        SELECT TableA.[Key] AS Expr1
                        FROM testdb1.dbo.TableA
                        ORDER BY TableA.[Key]
                    END
                END
            END

答案 1 :(得分:0)

在创建POrocedure SP_test之前添加这些代码行解决了问题。

                SET ANSI_NULLS ON
                GO
                SET QUOTED_IDENTIFIER ON
                GO