修改存储过程后部署

时间:2015-04-13 23:18:46

标签: sql stored-procedures visual-studio-2013 sql-server-2012

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

我正在尝试修改Visual Studio 2013 SQL Server数据库项目和SQL Server Express 2012中的存储过程。我知道我可以手动修改构建中的存储过程,但取决于我们应用程序的哪个分支我&#39 ;我正在努力,我需要更改存储过程。

我已尝试过多种编写脚本的方法,但总是围绕语法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

2 个答案:

答案 0 :(得分:3)

我终于能够解决这个问题了。为了改变过程,我必须运行存储过程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

答案 1 :(得分:1)

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

情形: 2个文件

部署后代码

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

我做了什么来解决这个问题是ADD

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

我认为发生这种情况的原因是因为

:r "files1.sql"

表示部署后复制file1.sql中的所有行并放入。

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

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

希望这有帮助。