如果 CREATE/ALTER 不是第一条语句,脚本总是会抛出错误

Script always throws an error if CREATE/ALTER is not first statement

当我尝试执行此 post 末尾给出的脚本时出现错误。我的要求是检查过程是否存在,如果存在则将其删除,最后创建过程。

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

Procedure Proc_GenerateTestData. 'CREATE/ALTER PROCEDURE' must be the first statement in a query batch. 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

正如错误 清楚地 所说 - CREATE PROCEDURE 必须是查询批处理中的第一个语句。

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

您需要更改脚本,使 CREATE PROCEDURE 语句真正成为查询批处理中的 first。如果您在 SQL Server Management Studio 中 运行 这个,只需在 CREATE.

之前添加一个 GO 分隔符