Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 EC('CREATE PROCEDURE mySchema.myProc AS SET NOCOUNT ON;')将PROCEDURE mySchema.myProc@DeclaredParmsGoHere数据类型更改为BEGIN@rasoo我不相信您可以_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql EC('CREATE PROCEDURE mySchema.myProc AS SET NOCOUNT ON;')将PROCEDURE mySchema.myProc@DeclaredParmsGoHere数据类型更改为BEGIN@rasoo我不相信您可以

Sql EC('CREATE PROCEDURE mySchema.myProc AS SET NOCOUNT ON;')将PROCEDURE mySchema.myProc@DeclaredParmsGoHere数据类型更改为BEGIN@rasoo我不相信您可以,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,EC('CREATE PROCEDURE mySchema.myProc AS SET NOCOUNT ON;')将PROCEDURE mySchema.myProc@DeclaredParmsGoHere数据类型更改为BEGIN@rasoo我不相信您可以在Sql Server中做到这一点,我想不出您想要这样做的原因。go命令分隔各个批处理命令。一旦删除一条语句,就会出现一个错误,即“alter”语句必须是批处理中的第一条语句。此外,Go使代码更易于阅读,因为它正确地表明,如果不存在该过程,则创


EC('CREATE PROCEDURE mySchema.myProc AS SET NOCOUNT ON;')将PROCEDURE mySchema.myProc@DeclaredParmsGoHere数据类型更改为BEGIN@rasoo我不相信您可以在Sql Server中做到这一点,我想不出您想要这样做的原因。go命令分隔各个批处理命令。一旦删除一条语句,就会出现一个错误,即“alter”语句必须是批处理中的第一条语句。此外,Go使代码更易于阅读,因为它正确地表明,如果不存在该过程,则创建该过程的步骤是它自己的批处理,更改该过程的步骤也是如此。但我必须这么做。我正在为c#project中的project编写sql脚本。这将在部署期间执行。而且它不支持“go”。目前我已经做了一个变通办法,创建两个独立的sql脚本文件。第一个是检查和创建。下一个是alter过程。不过,这个过程改变了过程。如果有人已经创建了它的更新版本,而现在我们正在覆盖它,该怎么办?如果程序已经存在,如何避免修改,如果不存在,如何避免创建新的程序,以避免丢失现有的程序代码?我完全不理解你的评论。上面的语句使用alter,这意味着它将更改数据库中存在的任何编译版本。如果有人创建了较新版本的proc,您应该创建较新版本的较新版本。整个要点是修改过程。我否决了这一点,因为语句的语法不正确。至少,您应该尽一点努力并测试该语句。显然,该语法对于SQL Server的现代实例是正确的(v2016,2017,…)。要摆脱撇号似乎很麻烦。
USE [myDatabase]
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'sp_1')
BEGIN
CREATE PROCEDURE sp_1
AS
.................
END
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'sp_2')
BEGIN
CREATE PROCEDURE sp_2
AS
.................
END
GO
USE [myDatabase]
GO

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'sp_1')
BEGIN
  DROP PROCEDURE sp_1
END
GO   --<-- Add a Batch Separator here



CREATE PROCEDURE sp_1
AS
.................
END
GO
IF EXISTS (
        SELECT type_desc, type
        FROM sys.procedures WITH(NOLOCK)
        WHERE NAME = 'myProc'
            AND type = 'P'
      )
     DROP PROCEDURE dbo.myProc
GO

CREATE PROC dbo.myProc

AS
....

    GO
    GRANT EXECUTE ON dbo.myProc TO MyUser 
BEGIN TRAN 
IF EXISTS (
       SELECT type_desc, type
       FROM sys.procedures WITH(NOLOCK)
       WHERE NAME = 'myProc'
           AND type = 'P'
     )
DROP PROCEDURE myProc GO
CREATE PROCEDURE myProc
   
AS
   --proc logic here

GO
-- BEGIN DO NOT REMOVE THIS CODE (it commits or rolls back the stored procedure drop) 
    IF EXISTS(
               SELECT 1
               FROM sys.procedures WITH(NOLOCK)
               WHERE NAME = 'myProc'
                   AND type = 'P'
             )
        COMMIT TRAN
        ELSE
        ROLLBACK TRAN
-- END DO NOT REMOVE THIS CODE
if exists (select 1 from sys.objects where object_id = object_id('dbo.yourProc'))
   set noexec on
go
create procedure dbo.yourProc as
begin
   select 1 as [not yet implemented]
end
go
set noexec off
alter procedure dbo.yourProc as
begin
   /*body of procedure here*/
end
create or alter dbo.yourProc as
go

drop procedure if exists dbo.yourProc;
BEGIN TRY
    --if procedure does not exist, create a simple version that the ALTER will replace.  if it does exist, the BEGIN CATCH will eliminate any error message or batch stoppage
    EXEC ('CREATE PROCEDURE AAAAAAAA AS DECLARE @A varchar(100); SET @A=ISNULL(OBJECT_NAME(@@PROCID), ''unknown'')+'' was not created!''; RAISERROR(@A,16,1);return 9999')
END TRY BEGIN CATCH END CATCH
GO

ALTER PROCEDURE AAAAAAAA 
(
     @ParamsHere varchar(10)
)
AS
PRINT 'HERE IN '+(OBJECT_NAME(@@PROCID))
GO
DROP PROCEDURE IF EXISTS name_of_procedure;
CREATE PROCEDURE name_of_procedure(....)
USE [MyDataBase]
GO

IF OBJECT_ID('mySchema.myProc') IS NULL
EXEC('CREATE PROCEDURE mySchema.myProc AS SET NOCOUNT ON;')
GO

ALTER PROCEDURE mySchema.myProc
    @DeclaredParmsGoHere    DataType

AS 
   BEGIN
       DECLARE @AnyVariablesINeed    Their DataType
   SELECT myColumn FROM myTable WHERE myIndex = @IndexParm
USE [DATABASENAME]
GO
DROP PROCEDURE IF EXISTS <proc name>
GO
CREATE PROCEDURE <proc name>
AS
-- your script here
END
GO
GRANT EXECUTE ON <proc name> TO <username>
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[spGetRailItems]') AND type in (N'P', N'PC'))
BEGIN 
execute ('
CREATE PROCEDURE [dbo].[spGetRailItems]  
AS  
BEGIN  

Declare @isLiftedBagsEnable bit=1;  
select @isLiftedBagsEnable=cast(DataValu as bit) from setups where scope =''Rail Setting'' and dataName = ''isLiftedBagsEnable'';

IF @isLiftedBagsEnable=1
BEGIN
    IF EXISTS (SELECT * FROM ITEMCONFIG)
    BEGIN
        SELECT [Item],[Desc] FROM ProcData WHERE Item IN (SELECT Item FROM ItemConfig) ORDER BY [Desc]
    END
    ELSE
    BEGIN
        SELECT [Item],[Desc] FROM ProcData ORDER BY [Desc]
    END
END
ELSE
BEGIN
    SELECT [Item],[Desc] FROM ProcData ORDER BY [Desc]
END

END

')
END

exec spGetRailItems;