Sql 部署后修改存储过程

Sql 部署后修改存储过程,sql,stored-procedures,visual-studio-2013,sql-server-2012,Sql,Stored Procedures,Visual Studio 2013,Sql Server 2012,有没有办法在部署后脚本中修改存储过程 我正在尝试修改Visual Studio 2013 SQL Server数据库项目和SQL Server Express 2012中的存储过程。我知道我可以在构建中手动修改存储过程,但根据我正在处理的应用程序的哪个分支,我需要更改存储过程 我尝试了许多编写脚本的方法,但总是在语法更改过程或创建过程中使用SQL80001或SQL72007。当我尝试重新创建该过程时,我会先删除它 以下脚本正在链接到script.PostDeployment.sql ALTER

有没有办法在部署后脚本中修改存储过程

我正在尝试修改Visual Studio 2013 SQL Server数据库项目和SQL Server Express 2012中的存储过程。我知道我可以在构建中手动修改存储过程,但根据我正在处理的应用程序的哪个分支,我需要更改存储过程

我尝试了许多编写脚本的方法,但总是在语法更改过程或创建过程中使用SQL80001或SQL72007。当我尝试重新创建该过程时,我会先删除它

以下脚本正在链接到script.PostDeployment.sql

ALTER PROCEDURE [dbo].[spCreateTemplate]
(
     @name varchar(250),
     @dataSourceID nvarchar(1)
)
AS
BEGIN
SET NOCOUNT ON;

DECLARE @id uniqueidentifier

SELECT @id = NEWID()
INSERT TemplateInfo
(
  ID,
  Name,
  DataModeID,
  DataSourceID,
  StartDepth,
  EndDepth,
  StartDateTime,
  EndDateTime,
  Increment,
  IsActive,
  IsRealTime,
  IsLogarithmic,
  CreatedBy,
  CreatedUTCDate,
  ModifiedBy,
  ModifiedUTCDate
)
VALUES
(
    @id,
    @name,
    1,
    @dataSourceID,
    NULL,
    NULL,
    NULL,
    NULL,
    1,
    0,
    1,
    0,
    SUSER_SNAME(),
    GETUTCDATE(),
    SUSER_SNAME(),
    GETUTCDATE()
)

SELECT @id
END

我终于解决了这个问题。为了修改该过程,我必须运行存储过程sp_executesql并将脚本传递给它以创建该存储过程。下面是我所做工作的一个例子:

GO
SET QUOTED_IDENTIFIER ON
GO

    DECLARE @sqlCmd nvarchar (4000)
    IF EXISTS(select * FROM sys.procedures where name = <spName>
    begin             
        drop procedure <spName>
        SELECT @sqlCmd = 'CREATE PROCEDURE [dbo].[<spName>]
             (<@variables datatype>)
             AS
             BEGIN
                 SET NOCOUNT ON;
                 DECLARE @id uniqueidentifier

                 SELECT @id = NEWID()
                 INSERT
                 <tablename>(<columns>)
                 VALUES
                 (<values>)

                 SELECT @ID
             END'
             EXEC sp_executesql @sqlCmd        
       END
   else
   begin
        SELECT @sqlCmd = 'CREATE PROCEDURE [dbo].[<spName>]
        (<@variables datatype>)
        AS
        BEGIN
             SET NOCOUNT ON;
             DECLARE @id uniqueidentifier

             SELECT @id = NEWID()
             INSERT
             <tablename>(<columns>)
             VALUES
             (<values>)

             SELECT @ID
         END'
         EXEC sp_executesql @sqlCmd       
END

我终于解决了这个问题。为了修改该过程,我必须运行存储过程sp_executesql并将脚本传递给它以创建该存储过程。下面是我所做工作的一个例子:

GO
SET QUOTED_IDENTIFIER ON
GO

    DECLARE @sqlCmd nvarchar (4000)
    IF EXISTS(select * FROM sys.procedures where name = <spName>
    begin             
        drop procedure <spName>
        SELECT @sqlCmd = 'CREATE PROCEDURE [dbo].[<spName>]
             (<@variables datatype>)
             AS
             BEGIN
                 SET NOCOUNT ON;
                 DECLARE @id uniqueidentifier

                 SELECT @id = NEWID()
                 INSERT
                 <tablename>(<columns>)
                 VALUES
                 (<values>)

                 SELECT @ID
             END'
             EXEC sp_executesql @sqlCmd        
       END
   else
   begin
        SELECT @sqlCmd = 'CREATE PROCEDURE [dbo].[<spName>]
        (<@variables datatype>)
        AS
        BEGIN
             SET NOCOUNT ON;
             DECLARE @id uniqueidentifier

             SELECT @id = NEWID()
             INSERT
             <tablename>(<columns>)
             VALUES
             (<values>)

             SELECT @ID
         END'
         EXEC sp_executesql @sqlCmd       
END

我在部署后也遇到了这个问题

情景: 2个文件

部署后代码

:r "file1.sql"
:r "file2.sql"
我所做的是添加

...<afterENDline>
<line>
<line>
GO
<line>
表示部署后复制file1.sql中的所有行并放入

因此,我认为你也可以这样做:

:r "file1.sql" GO
:r "file2.sql" GO

希望这有帮助。

我在部署后也遇到了这个问题

情景: 2个文件

部署后代码

:r "file1.sql"
:r "file2.sql"
我所做的是添加

...<afterENDline>
<line>
<line>
GO
<line>
表示部署后复制file1.sql中的所有行并放入

因此,我认为你也可以这样做:

:r "file1.sql" GO
:r "file2.sql" GO

希望这会有所帮助。

您是否已验证SQL文件本身的构建操作设置为“无”。如果设置不正确,则会出现类似错误的已知问题。脚本看起来不完整。例如,我看不到结局。请检查在粘贴脚本时是否缺少某些内容。我认为您的存储过程缺少开始…结束。因为它由多行组成,所以需要开始…结束抱歉,这是我的编辑错误。开始和结束包含在代码中,但收到相同的错误。Dillie,构建操作设置为“无”。我还验证了我正在使用最新的SSDT。在脚本之前和之后,您是否错过了一次尝试?您是否验证了SQL文件本身的构建操作设置为“无”。如果设置不正确,则会出现类似错误的已知问题。脚本看起来不完整。例如,我看不到结局。请检查在粘贴脚本时是否缺少某些内容。我认为您的存储过程缺少开始…结束。因为它由多行组成,所以需要开始…结束抱歉,这是我的编辑错误。开始和结束包含在代码中,但收到相同的错误。Dillie,构建操作设置为“无”。我还验证了我正在使用最新的SSDT。在脚本之前和之后,您是否错过了一次尝试?