在部署后修改存储过程



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

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

我已经尝试了许多编写脚本的方法,但总是围绕语法ALTER PROCEDURECREATE PROCEDURE进行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

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

场景:2 文件

部署后代码

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

我所做的解决这个问题是在每个文件中添加以下内容(例如 file1.sql 和 fil12.sql)

...<afterENDline>
<line>
<line>
GO
<line>

我认为发生这种情况的原因是部署后将所有行(如:r "files1.sql")复制到单个.sql文件中。

因此,我认为您也可以通过以下方式修复它:

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

希望这有帮助。

最新更新