标签: sqlclr

SQLCLR社区扩展或公共图书馆

刚刚第五次为SQLCLR编写了正则表达式替换和匹配函数以及tvf,我坐下来思考是否有一组SQLCLR的常见社区扩展,用于数据库中最常见但从未提供的内容.

例如,Powershell拥有一套出色的社区扩展,涵盖了包装盒中未包含的众多附加功能.没有它我不会使用Powershell.

我想也许SQLCLR有类似的东西.我正在寻找像这样的东西:

  • 正则表达式支持(isMatch,替换,匹配)
  • Base64编码/解码支持
  • 字符串格式(日期时间,字节数组,整数浮点数和小数等)
  • 散列,使用任意算法加密(我知道SQL 2k5,2k8支持一些基本的东西,但没有SHA2?这是什么?)
  • 常见的附加汇总; OR位,AND位,cat字符串(String.Join)
  • 压缩/解压缩

有没有人知道一个具有这种常见常规功能的库,我们都会反复写一遍?

.net c# sqlclr

5
推荐指数
1
解决办法
367
查看次数

在Sqlserver中CLR集成可能存在哪些问题

我读了一篇关于在sqlserver中使用CLR集成的文章,并想知道一些潜在的问题可能是什么,如果有的话.我的想法是用它来验证遗留数据库中的潜在坏数据.一个例子是电话号码栏中的人名.

编辑:我认为没有任何问题,但这不是我看到很多讨论的事情,并且想要确保我没有打开一个可以在以后引起问题的蠕虫.我问的原因是我的DBA看着我,就像我问起这个时我疯了似的.

.net sql-server sqlclr

5
推荐指数
1
解决办法
3662
查看次数

SQL Server 2008 CLR与T-SQL:是否存在效率/速度差异?

我是一名C#开发人员,他在T-SQL中完成了一些基本的数据库工作.但是,我需要编写一个非常复杂的存储过程,远高于我的T-SQL知识.

使用.net CLR作为SQL Server 2008的一部分在C#中编写存储过程会导致我的存储过程效率低于在T-SQL中编写的存储过程吗?差异(如果有的话)是否显着?为什么?

t-sql sql-server clr sqlclr sql-server-2008

5
推荐指数
2
解决办法
3313
查看次数

我如何解析布尔逻辑?

我需要编写一个布尔逻辑解析器,它将布尔逻辑语言转换为SQL WHERE子句.

操作数的顺序始终是正确的顺序(右边的值).

这是一个相对简单的例子.可能有嵌套括号和NOT运算符等的使用.

(CACOUNT=01 OR CACOUNT=02 OR CACOUNT=03)
 AND Q4=1 AND NAME=TIMOTHY
Run Code Online (Sandbox Code Playgroud)

这是WHERE子句类似的内容.

WHERE (
     EXISTS (
       SELECT 1 FROM MyVerticalTable b
       WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='01'
     )
  OR EXISTS (
       SELECT 1 FROM MyVerticalTable b
       WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='02'
  )
  OR EXISTS (
       SELECT 1 FROM MyVerticalTable b
       WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='03'
  )
)
AND EXISTS (
       SELECT 1 FROM MyVerticalTable b
       WHERE b.Key=a.Key AND b.Key='Q4' AND b.Value='1'
)
AND EXISTS (
       SELECT …
Run Code Online (Sandbox Code Playgroud)

parsing boolean-logic sqlclr

5
推荐指数
1
解决办法
891
查看次数

如何使用Nvarchar(max)参数创建CLR存储过程?

是否可以在SQL Server CLR项目中创建具有nvarchar(max)类型的输入参数的CLR存储过程?

如果您定义存储过程:

<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub MyProcedure(ByVal param1 As String)

然后在部署它时,param1的类型为NVarchar(4000).有没有办法让它成为NVarchar(最大)?

sql-server types sqlclr sqldatatypes

5
推荐指数
2
解决办法
4385
查看次数

在SQL CLR中访问COM

希望大家度过美好的一天!

我需要你对过去三天我一直在考虑的事情提出建议.我有一个用非托管平台编写的COM组件.该组件有一个返回一些敏感数据的方法,我需要在得到它后立即存储该值.

我需要的是调用UDF来访问COM对象并获取值.到目前为止我已经尝试了这个,我得到了这个例外:

消息6522,级别16,状态2,行1
在执行用户定义的例程或聚合"GetRate"期间发生.NET Framework错误:System.Runtime.InteropServices.COMException:检索具有CLSID的组件的COM类工厂{D039A99F- 5D45-42C7-A53C-507913D8C6D6}由于以下错误而失败:80040154.System.Runtime.InteropServices.COMException
:
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type,Boolean publicOnly,Boolean noCheck,Boolean&canBeCached,RuntimeMethodHandle&ctor,Boolean&bNeedSecurityCheck)
在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean fillCache)
at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly,Boolean skipVisibilityChecks,Boolean fillCache)
在 System.Activator.CreateInstance(Type type,Boolean nonPublic)
at UserDefinedFunctions.GetRate(SqlString Source_Currency_Name,SqlString Destination_Currency_Name,SqlMoney Amount,SqlBoolean Mode)

似乎该功能无法看到已注册的COM组件(80040154).clr程序集注册为不受限制.我试图用'sa'或Windows集成模式调用UDF.没有区别.

这是用于初始化COM组件的代码,代码在SQL之外正常工作:

Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("D039A99F-5D45-42C7-A53C-507913D8C6D6"), true))
Run Code Online (Sandbox Code Playgroud)

反正有没有让这个工作的人?不管怎样,我需要一个UDF来调用这个COM对象,或者至少通过这个UDF使用.NET远程访问一些Windows服务.通过这种方式指导我的每一个建议将不胜感激.

谢谢你们.

c# com sqlclr user-defined-functions sql-server-2008

5
推荐指数
2
解决办法
698
查看次数

SQL Server HASHBYTES SHA2_512和C#

如果我在SQL Server中运行以下内容:

SELECT HASHBYTES('SHA2_512', 'THE CAT SAT ON THE MAT')
Run Code Online (Sandbox Code Playgroud)

然后在C#中运行它

string test = WordFunctions.SHA512("THE CAT SAT ON THE MAT");
Run Code Online (Sandbox Code Playgroud)

我得到了同样的价值,两者都很棒.但是,如果我在C#代码中传递一个字符串变量,那么这样:

string words = "THE CAT SAT ON THE MAT"

byte[] test
test = WordFunctions.SHA512(words);
Run Code Online (Sandbox Code Playgroud)

然后我没有得到相同的价值?!

有任何想法吗?

SHA512函数如下所示:

public static byte[] SHA512(String plaintext)
{
   // convert the passPhrase string into a byte array
   ASCIIEncoding AE = new ASCIIEncoding();
   byte[] passBuff = AE.GetBytes(plaintext);

   SHA512Managed hashVal = new SHA512Managed();
   byte[] passHash = hashVal.ComputeHash(passBuff);

   return passHash;
}
Run Code Online (Sandbox Code Playgroud)

c# sql-server encryption sqlclr

5
推荐指数
1
解决办法
3897
查看次数

在SQL Server CLR程序集中使用Microsoft Solver Foundation

我目前正在编写自己的CLR存储过程,我需要使用Microsoft Solver Foundation的解算器.

为了能够在我的CLR项目中添加对Microsft Solver Foundation的引用,我需要将该程序集添加到我的SQL Server实例(源).所以我安装了MS Solver Foundation Redistributable,并使用以下脚本作为服务器管理员在SQL Server中注册它:

USE MYDB

ALTER DATABASE MYDB SET TRUSTWORTHY ON WITH ROLLBACK IMMEDIATE

ALTER DATABASE MYDB SET TRUSTWORTHY ON

CREATE ASSEMBLY MicrosoftSolverFoundation
AUTHORIZATION dbo
FROM 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.Solver.Foundation.dll' 
WITH PERMISSION_SET = UNSAFE
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

Assembly 'MicrosoftSolverFoundation' could not be installed because existing policy would keep it from being used.
Run Code Online (Sandbox Code Playgroud)

附加信息

CLR版本:

directory   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
version v4.0.30319
state   CLR is initialized
Run Code Online (Sandbox Code Playgroud)

SQL Server版本:

Microsoft SQL Server 2012 (SP1) - …
Run Code Online (Sandbox Code Playgroud)

c# sql-server clr sqlclr ms-solver-foundation

5
推荐指数
1
解决办法
366
查看次数

GAC中的SQLCLR函数和System.Runtime.Serialization

我在C#中构建了一个SQLCLR函数,该函数将反序列化JSON并返回一个表。

我遇到的问题是在SQL Server 2012中获取正确的程序集。

为了利用Newtonsoft的反序列化器,我不得不向SQL Server添加以下程序集:

System.ServiceModel.Internals.dll
SMDiagnostics.dll
System.Runtime.Serialization.dll
Newtonsoft.Json.dll
Run Code Online (Sandbox Code Playgroud)

这一切都按计划进行,但是当我尝试运行函数时,出现以下错误:

System.IO.FileLoadException:无法加载文件或程序集“ System.Runtime.Serialization,版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089”或其依赖项之一。主机存储区中的程序集与GAC中的程序集具有不同的签名。(来自HRESULT的异常:0x80131050)有关更多信息,请参见Microsoft知识库文章949080。---> System.IO.FileLoadException:无法加载文件或程序集'System.Runtime.Serialization,版本= 3.0.0.0,区域性=中性,PublicKeyToken = b77a5c561934e089'或其依赖项之一。主机存储区中的程序集与GAC中的程序集具有不同的签名。(来自HRESULT的异常:0x80131050)有关更多信息,请参见Microsoft知识库文章949080。

服务器已安装.NET 4,而我尝试添加的DLL是从该服务器中获取的。但是,C:\ Windows \ assembly中显示的DLL是版本3.0.0。

我使用Powershell更新了GAC中的DLL,但这仅更新了位于C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL中的DLL。

我到底如何在C:\ Windows \ assembly(我假设这是SQL Server与之进行比较的地方)处获得GAC以反映正确的程序集?

任何帮助是极大的赞赏。

.net sql-server gac sqlclr sql-server-2012

5
推荐指数
2
解决办法
4758
查看次数

SQL 71501有一个未解析的程序集引用

我们正在使用SSDT工具将Visual Studio 2015和目标平台设置为SQL Server 2008.我们坚持使用此功能,这会导致错误并需要帮助我们可以采取哪些措施来解决问题.

 SQL71501: Function: [dbo].[GetFormattedAddress] has an unresolved reference to Assembly [AddressFormatting]


 CREATE FUNCTION [dbo].[GetFormattedAddress]
 (@AddressID INT, @CompleteAddress BIT)
RETURNS NVARCHAR (4000)
AS
EXTERNAL NAME [AddressFormatting].[AddressFormatting.UserDefinedFunctions].[GetFormattedAddress]

GO
Run Code Online (Sandbox Code Playgroud)

--update

在Assemblies文件夹下,对于AddressFormatting.dll,我将BuildAction设置为Build,然后在References下我设法看到Model Aware属性,我现在已经设置为True.在此之后,我收到以下错误:

SQL46010:附近的语法不正确在此输入图像描述

它指向错误的文件是AddressFormatting.dll

sql-server sqlclr sql-server-data-tools visual-studio-2015

5
推荐指数
2
解决办法
1883
查看次数