AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 270167
Accepted
Definite
Definite
Asked: 2020-07-01 15:23:08 +0800 CST2020-07-01 15:23:08 +0800 CST 2020-07-01 15:23:08 +0800 CST

SQL Server & SSDT:在添加 CREATE AGGREGATE / EXTERNAL NAME 后发布期间的错误建模数据库

  • 772

我正在使用 SSDT 创建一个包含 CLR 用户定义聚合的数据库。

聚合旨在位于不同的模式中。如果不使用部署后脚本在部署后移动对象,SSDT 中的 CLR 对象就不可能做到这一点。

我正在尝试做的是:

  • 使用“默认模式”选项在单个模式(“CLR”模式)中创建 CLR 聚合
  • 在所需架构中使用 CREATE AGGREGATE 包装器来调用 CLR 聚合

例如,我有一个 CLR 聚合,例如:

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize = -1)]
public struct StatsEntropy : IBinarySerialize
{
 ... etc
}

这被编译并成为数据库中的 CLR.StatsEntropy。该数据库称为 AnalysisFunctions,因此它有一个也称为 AnalysisFunctions 的程序集。这没有问题。

然后我在 Stats 模式中创建一个包装器,如下所示:

CREATE AGGREGATE [Stats].[Entropy]
(
    @Values FLOAT
)
RETURNS FLOAT
EXTERNAL NAME AnalysisFunctions.StatsEntropy

当我通过调试构建时,这可以正常工作。我将调试连接设置为 SQL Server 的命名实例。如果我按 F5,它将毫无问题地编译和部署。该代码现在可以在服务器上使用,包括包装器。

但是,如果我尝试使用 Publish 发布到服务器,它就不起作用。相反,它失败了:

对目标数据库建模时发生错误。部署无法继续。

数据工具操作面板或错误列表中没有更多错误消息。ssdttrace 没有显示有用的信息:

ssdttrace 事件日志

这只发生在数据库已经存在于服务器上时。如果我删除数据库,它可以成功部署。即使数据库已经存在,我也可以通过调试成功部署,只有通过发布才会出现问题。直到我添加了聚合包装器,我才开始遇到这个问题。

以前我也收到错误,表明由于使用外部名称,程序集 AnalysisFunctions 有一个未解析的引用 - 再次通过调试工作,而不是通过发布工作。但现在这个错误已经神秘地消失了。

我正在使用 Visual Studio 2017 15.9.21 和 SSDT 15.1.62002.01090,部署到 SQL Server 2019。

有谁知道这个错误可能是什么,或者我如何调试它?

sql-server aggregate
  • 1 1 个回答
  • 804 Views

1 个回答

  • Voted
  1. Best Answer
    Josh Darnell
    2020-07-02T07:13:33+08:002020-07-02T07:13:33+08:00

    我无法使用与您相同版本的 SSDT 重现此问题。我确实有一个稍新的 Visual Studio (15.9.24),但如果这很重要,我会感到惊讶。这是我的(非常小的)设置,如果我误解了您的场景的某些部分,请告诉我:

    SSDT项目

    Visual Studio 解决方案资源管理器的屏幕截图,显示了我的 SSDT 项目中的所有文件

    clr.sql

    CREATE SCHEMA [clr]
    

    统计.sql

    CREATE SCHEMA [Stats]
    

    统计熵.cs

    using System;
    using System.Data.SqlTypes;
    using Microsoft.SqlServer.Server;
    
    [Serializable]
    [SqlUserDefinedAggregate(Format.Native)]
    public struct StatsEntropy
    {
        public void Init()
        {
            // Put your code here
        }
    
        public void Accumulate(SqlString Value)
        {
            // Put your code here
        }
    
        public void Merge(StatsEntropy Group)
        {
            // Put your code here
        }
    
        public SqlString Terminate()
        {
            // Put your code here
            return new SqlString(string.Empty);
        }
    
        // This is a place-holder member field
        public int _var1;
    }
    

    默认架构

    Visual Studio 中 SSDT 项目属性的屏幕截图,显示 clr 的默认架构和 SQL Server 2019 的目标平台

    通常,预览生成期间的失败表明目标数据库中存在 SSDT 模型 (dacpac) 中不存在的对象。此处在 Stack Overflow 上对此进行了讨论:SSDT Publish errors on Creating Publish Preview

    您可以使用“架构比较”功能来检查是否适合您。

    如果目标中没有冲突的对象,那么如果您可以编辑您的问题以包含您的发布设置(“.publish.xml”文件,或至少发布时“高级”窗口的屏幕截图),将会很有帮助。可能是一些奇怪的选项组合导致了问题。

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve