Sql 部署后修改存储过程
有没有办法在部署后脚本中修改存储过程 我正在尝试修改Visual Studio 2013 SQL Server数据库项目和SQL Server Express 2012中的存储过程。我知道我可以在构建中手动修改存储过程,但根据我正在处理的应用程序的哪个分支,我需要更改存储过程 我尝试了许多编写脚本的方法,但总是在语法更改过程或创建过程中使用SQL80001或SQL72007。当我尝试重新创建该过程时,我会先删除它 以下脚本正在链接到script.PostDeployment.sqlSql 部署后修改存储过程,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
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。在脚本之前和之后,您是否错过了一次尝试?