在UNSAFE模式下使用文件路径创建组件不会在数据库中创建函数

尼尔曼

我正在尝试使用以下语句在SQL Server中注册CLR程序集:

CREATE ASSEMBLY SQLCLRTest
AUTHORIZATION [dbo]
FROM 'C:\MyApp\SQLCLRTest.dll'
WITH PERMISSION_SET = UNSAFE;

CLR程序集使用pfx密钥签名,并且我已经创建了一个非对称密钥和SQL登录名,以允许使用UNSAFE权限集安装此特定程序集。

问题是上面的语句在数据库中创建了程序集,但没有显示我在程序集中创建的任何sql server函数。

我看不到CLR程序集的任何问题,因为当我在Visual Studio中通过SQL Server数据库项目发布数据库时,可以看到在数据库中创建了所有函数。当我查看发布脚本时,我可以看到数据库项目使用程序集的Binary。这意味着,它执行类似

CREATE ASSEMBLY SQLCLRTest
AUTHORIZATION [dbo]
FROM 0x4D5A90000300000004000000FFFF000.......
WITH PERMISSION_SET = UNSAFE;

所以我的问题是,为什么程序集通过DLL二进制文件正确注册,而当我使用DLL的路径时却不能注册?

在这方面的任何帮助将不胜感激。

数据库服务器:SQL Server2012。在Visual Studio 2013中创建数据库项目。在Visual Studio 2013中将CLR程序集创建为单独的类库项目。

所罗门·鲁兹基

为什么程序集通过DLL二进制文件正确注册,但是当我使用DLL的路径时却不能注册?

问题不在于程序集的创建(您所指的是注册)。如果运行时未出现错误,CREATE ASSEMBLY则说明已成功创建。

但是,程序集本身仅包含可以由T-SQL包装对象引用的.NET方法,但是创建程序集并不能自动创建那些T-SQL包装对象。这些需要明确创建。

SSDT使用的主要发布脚本是diff /增量脚本,用于使目标DB达到项目所隐含的状态。如果要始终获取CREATE语句而不管正在部署的任何更改,请确保:

  1. 绝对检查“项目属性”的“ SQLCLR”选项卡上的“生成DDL”选项。此选项控制包装对象是否CREATE语句(即CREATE PROCEDURECREATE FUNCTIONCREATE TYPECREATE AGGREGATE,和CREATE TRIGGER语句)被生成。

  2. (可选)在“项目属性”的“项目设置”选项卡上选中“创建脚本(.sql文件)”复选框。选中此复选框后,每次进行构建时,都会有一个{Build tab.BuildOutputPath} \ {Build tab.BuildOutputFileName} _Create.sql脚本。_Create.sql脚本将始终包含该CREATE ASSEMBLY语句。

进行构建时,将始终有一个obj \ Debug \ {SQLCLR选项卡。AssemblyName} .generated.sql脚本。该脚本将始终包含该CREATE ASSEMBLY语句。该脚本也将包含CREATE PROCEDURECREATE FUNCTIONCREATE TYPECREATE AGGREGATE,和CREATE TRIGGER语句,如果你有“生成DDL”选项选中(#1以上)。该脚本不是完全可运行的,因为它顺序混乱,但是该脚本中的语句用于生成Publish和可选的Create脚本。

如果你有“创建脚本”选项选中(上述#2),然后,假设你也有“生成DDL”选项选中(#1再次)中,CREATE PROCEDURECREATE FUNCTIONCREATE TYPECREATE AGGREGATE,和CREATE TRIGGER语句也将在{构建tab.BuildOutputPath} \ {Build tab.BuildOutputFileName} _Create.sql脚本。在此脚本中,语句将以正确的顺序进行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Hibernate 不会在数据库中为单向多对一创建外键

我拥有的代码不会在数据库中创建值

数据不会在数据库中更新

sqlalchemy postgresql枚举不会在数据库迁移上创建类型

Rails-创建操作不会在数据库中保存记录

行不会在数据库中更新

使用AJAX和PHP时不会在数据库中删除行

在Model类中设置关系不会在playFramework中创建数据库表条目

Createdb不会在postgres中创建数据库:无错误消息

表格不会在数据库中提交

通过gcloud在数据存储区模式下使用Firestore时创建数据库?

即使使用DJANGO模型表格提交后,图片也不会在数据库中更新

Laravel 不会在数据库中存储额外的会话属性

PHP不会在数据库中回显“ <”符号

Rails 6.1.1 不会在生产模式下加载 webpacker 创建的 CSS 文件

OneToMany不会在H2数据库上使用ON DELETE CASCADE创建外键

Laravel迁移不会在其他数据库上创建外键

Django 不会在我的数据库上创建迁移

Azure不会在EFCore 2应用程序发布时创建数据库架构

Spring boot不会在Mysql上自动创建数据库表

Laravel 不会在数据库中存储特定的表单数据而不会出错

使用直接查询不会在Oracle数据库中显示插入的数据

Docker不会在指定的卷中创建文件

使用 Firebase 不会在 Unity 编辑器中更新数据库

无法使用 Hibernate 在数据库中创建表

如何使用jQuery在数据库中创建表

在数据库中创建字段

在数据库中创建表

带有 EF6 的 WPF 应用程序不会在 SQL Server Enterprise 中创建新数据库