有没有办法在部署后脚本中修改存储过程?
我正在尝试修改Visual Studio 2013 SQL Server数据库项目和SQL Server Express 2012中的存储过程。我知道我可以手动修改构建中的存储过程,但取决于我们应用程序的哪个分支我&#39 ;我正在努力,我需要更改存储过程。
我已尝试过多种编写脚本的方法,但总是围绕语法ALTER PROCEDURE
或CREATE 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
答案 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
希望这有帮助。