如果CREATE / ALTER不是第一个语句,则脚本始终会抛出错误

时间:2015-04-21 18:48:15

标签: stored-procedures sql-server-2012

当我尝试执行本文末尾给出的脚本时,我收到错误。我的要求是检查程序是否存在,然后在存在的情况下将其删除并最终创建程序。

如何使用单个脚本文件执行此操作?

  

程序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 个答案:

答案 0 :(得分:1)

正如错误明确所述 - CREATE PROCEDURE必须是查询批处理中的第一个语句。

这不是这种情况,因为你事先检查了DROP

您需要更改脚本,以便CREATE PROCEDURE语句确实是查询批处理中的第一个。如果您在SQL Server Management Studio中运行此操作,只需在GO之前添加CREATE分隔符。