2013-11-25 108 views
0

下面是下降,對我的存儲procedure.While創建腳本的數據庫我收到提示味精102不正確的語法

Msg 102, Level 15, State 1, Line 18 Incorrect syntax near 'Date'. Msg 105, Level 15, State 1, Line 35 Unclosed quotation mark after the character string ' END '.

我試着用添加,刪除引號,但沒有執行這個腳本工作。

誰能告訴我有什麼,以便執行該腳本做成功

/****** Object: StoredProcedure [dbo].[MY_PROC] Script Date: 9/12/2013 3:31:17 PM ******/ 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MY_PROC]') AND type in (N'P', N'PC')) 
DROP PROCEDURE [dbo].[MY_PROC] 
GO 
/****** Object: StoredProcedure [dbo].[MY_PROC] Script Date: 9/12/2013 3:31:17 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MY_PROC]') AND type in (N'P', N'PC')) 
BEGIN 
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[MY_PROC] 
(@P_Date DateTime=null) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    DECLARE @M_DATE_PARAM DATETIME 
    DECLARE @M_PREVIOUS_DATE DATETIME 
    DECLARE @M_TODAYS_DATE DATETIME 

    IF @P_Date IS NULL 
    SET @P_Date=GetDate() 

    PRINT 'Date passed as a parameter -' + CAST(@P_Date AS varchar(100)) 
     BEGIN TRY 
      BEGIN TRANSACTION REIMBURSEMENT_TRN 

       BEGIN     
        -- my statements go here which do not cause any error 

       END 
       PRINT 'SUCCESS: Procedure Success' 
      COMMIT TRANSACTION ; 
     END TRY 
     BEGIN CATCH 
      PRINT 'ERROR: Procedure Fail' 
      PRINT ERROR_MESSAGE() 
      PRINT ERROR_LINE() 
      ROLLBACK TRANSACTION ; 
     END CATCH 
     PRINT 'Procedure Complete' 
END 

回答

0

你應該逃避單引號與另一報價
試試這個:

PRINT ''Date passed as a parameter -'' + CAST(@P_Date AS varchar(100)) 

編輯

順便說一句,你應該杜絕在查詢

結束

完整代碼:

/****** Object: StoredProcedure [dbo].[MY_PROC] Script Date: 9/12/2013 3:31:17 PM ******/ 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MY_PROC]') AND type in (N'P', N'PC')) 
DROP PROCEDURE [dbo].[MY_PROC] 
GO 
/****** Object: StoredProcedure [dbo].[MY_PROC] Script Date: 9/12/2013 3:31:17 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MY_PROC]') AND type in (N'P', N'PC')) 
BEGIN 
EXEC dbo.sp_executesql N'CREATE PROCEDURE [dbo].[MY_PROC] 
(@P_Date DateTime=null) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    DECLARE @M_DATE_PARAM DATETIME 
    DECLARE @M_PREVIOUS_DATE DATETIME 
    DECLARE @M_TODAYS_DATE DATETIME 

    IF @P_Date IS NULL 
    SET @P_Date=GetDate() 

    PRINT ''Date passed as a parameter -'' + CAST(@P_Date AS varchar(100)) 
     BEGIN TRY 
      BEGIN TRANSACTION REIMBURSEMENT_TRN 

       BEGIN     
        -- my statements go here which do not cause any error 

       END 
       PRINT ''SUCCESS: Procedure Success'' 
      COMMIT TRANSACTION ; 
     END TRY 
     BEGIN CATCH 
      PRINT ''ERROR: Procedure Fail'' 
      PRINT ERROR_MESSAGE() 
      PRINT ERROR_LINE() 
      ROLLBACK TRANSACTION ; 
     END CATCH 
     PRINT ''Procedure Complete'' 
END' 

END 
+0

很滿意..不工作 – Rohaan

+0

不能把日期轉換成varchar –

0

PRINT需求字符串或的Unicode字符串常量

嘗試使用

PRINT N''Date passed as a parameter -''... 

你也錯過了最後的報價尾部呃程序的END

EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[MY_PROC] 
(@P_Date DateTime=null) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    DECLARE @M_DATE_PARAM DATETIME 
    DECLARE @M_PREVIOUS_DATE DATETIME 
    DECLARE @M_TODAYS_DATE DATETIME 

    IF @P_Date IS NULL 
    SET @P_Date=GetDate() 

    PRINT N''Date passed as a parameter -'' + CAST(@P_Date AS varchar(100)) 
     BEGIN TRY 
      BEGIN TRANSACTION REIMBURSEMENT_TRN 

       BEGIN     
        -- my statements go here which do not cause any error 

       END 
       PRINT N''SUCCESS: Procedure Success'' 
      COMMIT TRANSACTION ; 
     END TRY 
     BEGIN CATCH 
      PRINT N''ERROR: Procedure Fail'' 
      PRINT ERROR_MESSAGE() 
      PRINT ERROR_LINE() 
      ROLLBACK TRANSACTION ; 
     END CATCH 
     PRINT N''Procedure Complete'' 
END' 
+0

試過你的選項..同樣的結果 – Rohaan