Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 删除过程(如果存在)无法运行SQL Server 2016_Sql Server - Fatal编程技术网

Sql server 删除过程(如果存在)无法运行SQL Server 2016

Sql server 删除过程(如果存在)无法运行SQL Server 2016,sql-server,Sql Server,我已经使用SQL Server Management Studio 2016 v13.0.16生成了存储过程。生成脚本后,我已经执行了脚本,我得到一个错误: 关键字“IF”附近的语法不正确 错误发生在第行: DROP PROCEDURE IF EXISTS [dbo].[SP_Test] 我已检查SQL Server版本: select @@version 结果是: Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64

我已经使用SQL Server Management Studio 2016 v13.0.16生成了存储过程。生成脚本后,我已经执行了脚本,我得到一个错误:

关键字“IF”附近的语法不正确

错误发生在第行:

DROP PROCEDURE IF EXISTS [dbo].[SP_Test]
我已检查SQL Server版本:

select @@version 
结果是:

Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64)   
Aug 15 2017 10:23:29   
Copyright (c) Microsoft Corporation  Express Edition (64-bit) on Windows NT 6.3 <X64> (Build 14393: ).
生成的脚本为:

DROP PROCEDURE IF EXISTS [dbo].[SP_Test]
Incorrect syntax near the keyword 'IF'.
/****** Object:  StoredProcedure [dbo].[SP_Test]    Script Date: 02/24/2020 12:28:17 PM ******/
DROP PROCEDURE IF EXISTS [dbo].[SP_Test]
GO
/****** Object:  StoredProcedure [dbo].[SP_Test]    Script Date: 02/24/2020 12:28: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].[SP_Test]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[SP_Test] AS'
END
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[SP_Test]
AS
BEGIN
select * from Emp
END
GO
有人帮我吗?

DROP PROCEDURE语句的IF EXISTS参数仅在SQL Server 2016及更新版本中可用

如果存在 适用于:SQL Server SQL Server 2016 13.x至当前版本

您可以在早期版本中使用2语句方法:

IF (OBJECT_ID('dbo.SPName', 'P') IS NOT NULL) BEGIN
  DROP PROCEDURE dbo.SPName;
END;

CREATE PROCEDURE sbo.SPName...
只需检查sp是否存在…如果存在,则使用sysobjects删除


这将适用于所有其他版本的SQL Server

您使用的是SQL Server 2012而不是2016我使用的是SQL Server management studio 2016 management studio是客户端工具而不是SQL Server数据库。请参见打印@@version显示为SQL Server 2012的版本。版本有问题,我需要更改注意:您不应该在存储过程中使用sp_uu前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp_u,并使用其他东西作为前缀——或者根本不使用前缀!它工作得很好。但是,如果存在[dbo].[SP_Test],为什么要将SQL server脚本生成为删除过程?因为在SQL server 2012中,如果存在不是一件事,我正在使用SSMS 2016。SQL server版本显示为SQL 2012。如何更改?SSMS不是SQL Server。SSMS是一个客户端应用程序,重要的是SQL Server的版本。使用更新版本的SSMS不会神奇地升级它所连接的SQL Server。服务器仍需理解该语句,而不管客户端应用程序SSM如何,SQL server 2012都无法理解该语句是否存在。谢谢,我将要求我办公室的IT团队将SQL server 2016从SQL server 2012更改为SQL server 2016。我知道上述脚本工作正常。但是我的电脑的主要问题是SSMS 2016和SQL server 2012如果存在,请从sysobjects中选择Top 1,其中id=object_idN'[dbo].[SP_Test]'和OBJECTPROPERTYid,N'IsProcedure'=1 BEGIN DROP PROCEDURE[dbo].[SP_Test]END@@@Raju Gaddam代替select*from…您可以使用Top 1 1..这将使速度更快…@Akhilessingh在EXISTS的上下文中Top 1 1和select*之间实际上没有性能差异。@@Pred…Top 1 1和select*…之间有差异。。。。。Top 1 1将只拾取一列。另一方面,选择*将拾取所有列并选中…因此在这方面存在差异。。。
IF EXISTS (SELECT Top 1 1 FROM sysobjects WHERE id = object_id(N'[dbo].[SP_Test]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
    BEGIN

    DROP PROCEDURE [dbo].[SP_Test]

    END



    /****** Object:  StoredProcedure [dbo].[SP_Test]    Script Date: 02/24/2020 12:28: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].[SP_Test]') AND type in (N'P', N'PC'))
    BEGIN
    EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[SP_Test] AS'
    END
    GO
    -- =============================================
    -- Author: <Author,,Name>
    -- Create date: <Create Date,,>
    -- Description: <Description,,>
    -- =============================================
    ALTER PROCEDURE [dbo].[SP_Test]
    AS
    BEGIN
    select * from Emp
    END
    GO