【问题标题】:Executing procedure in post deployment script - SSDT在部署后脚本中执行过程 - SSDT
【发布时间】:2020-03-30 06:49:07
【问题描述】:

在我的部署后脚本文件中,我正在执行最初在 db 项目本身中创建的存储过程:

数据库项目:

但是每当我发布数据库项目时,我都会收到以下错误

过程 st_company_register,第 56536 行 INSERT 失败,因为 以下 SET 选项的设置不正确:“ANSI_PADDING”。核实 SET 选项对于索引视图和/或索引是正确的 在计算列和/或过滤索引和/或查询通知上 和/或 XML 数据类型方法和/或空间索引操作。

以下是程序:

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    Create PROCEDURE [dbo].[st_company_register]
               @languageID int,
               @company_typeID int,
               @company_name nvarchar(100)
--Untill the end of proc

这是执行代码:

 exec [dbo].[st_company_register]
           @languageID =1,
           @company_typeID =4,
           @company_name =N'Company Name'

这是我的数据库项目设置,其中有 ANSI_PADDING:

有什么想法吗?

【问题讨论】:

  • “虽然程序本身的 ANSI_PADDING 设置为 ON,如下所示” - 这个选项真的设置了吗?我只能看到 ANSI_NULLS。
  • 是的,正确!让我再检查一下,虽然 ANSI_Padding 标记在数据库设置上,但该过程不是使用该选项创建的
  • 1.将“SET ANSI_PADDING ON”放入您的 SP。 2.根据“此设置仅影响新列的定义。创建列后,SQL Server根据创建列时的设置存储值。现有列不受以后更改此设置的影响。” ,我会检查 SP 中使用的当前列 ANSI_PADDING 设置。
  • 其实在程序上面插入这个会产生编译错误,这个语句在这个上下文中是不允许的
  • 您可以将“SET ansi_padding on”放在您的程序主体中。它不应该产生错误。

标签: sql sql-server continuous-deployment sql-server-data-tools database-project


【解决方案1】:

为避免在在部署后脚本中执行存储过程时出现此问题,只需将执行语句包装为 Set ANSI_PADDING ON,如下所示:

Set ANSI_PADDING ON

exec [dbo].[Proc]
           @languageID =1,
           @company_typeID =4,
           @company_name =N'Company Name'

Set ANSI_PADDING OFF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2013-09-24
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多