2015-04-21 23 views
1

當我嘗試執行本帖末尾給出的腳本時出現錯誤。我的要求是檢查過程的存在,然後放下它,如果存在,最後創建過程。如果CREATE/ALTER不是第一條語句,腳本總是拋出一個錯誤

我該如何使用單個腳本文件來做到這一點?

Procedure Proc_GenerateTestData。 'CREATE/ALTER PROCEDURE'必須是查詢批處理中的第一條語句。 SQL2.sql 12 1

總是拋出上述錯誤的SQL腳本如下。

IF OBJECT_ID('dbo.Proc_GenerateTestData', 'p') IS NOT NULL 
BEGIN 
    DROP PROCEDURE dbo.Proc_GenerateTestData 
END 


CREATE PROCEDURE dbo.Proc_GenerateTestData @numberOfRecords INT = 100 
AS 
    --drop table #temp1 

    DECLARE @currentTime AS TIME = CAST(GETDATE() AS TIME); 
    DECLARE @currentWorkShiftDate AS DATETIME = CAST(CAST(GETDATE() AS DATE) AS DATETIME); 

    DECLARE @startTime TIME, 
      @lastShiftStartTime TIME; 

    DECLARE @tenantId AS UNIQUEIDENTIFIER = (SELECT TOP (1) 
    Tenants.Id 
    FROM Tenants 
    ORDER BY Tenants.Id ASC); 
    DECLARE @workshiftId INT, 
    @lastShiftStartDate DATETIME; 
    --more statements for this procedure follow 
+1

由於錯誤*清楚*表示 - CREATE PROCEDURE **必須是**查詢批處理中的第一條語句。這是**不是**這裏的情況,因爲您在....之前檢查了「DROP」,所以您需要更改腳本以使「CREATE PROCEDURE」語句**成爲查詢中的第一個批處理 - 如果您在SQL Server Management Studio中運行此操作,只需在「CREATE」之前添加一個「GO」分隔符。...... –

+0

您可以將此作爲答案嗎?它爲我工作。 – Sunil

回答

1

由於錯誤明確說 - 在CREATE PROCEDURE必須在查詢批處理的第一條語句。

這裏不是這種情況,因爲您事先已檢查了DROP

您需要更改腳本,以使CREATE PROCEDURE語句實際上是查詢批處理中的第一個。如果您在SQL Server Management Studio中運行此操作,只需在CREATE之前添加一個GO分隔符。

相關問題