有没有办法修改部署后脚本中的存储过程?
我正在尝试修改Visual Studio 2013 SQL Server Database Project和SQL Server Express 2012中的存储过程。我知道我可以在生成中手动修改存储过程,但根据我正在处理的应用程序的哪个分支,我需要更改存储过程。
我已经尝试了许多编写脚本的方法,但总是围绕语法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
我终于能够解决这个问题了。为了更改该过程,我必须运行存储过程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
希望这有帮助。