刚刚第五次为SQLCLR编写了正则表达式替换和匹配函数以及tvf,我坐下来思考是否有一组SQLCLR的常见社区扩展,用于数据库中最常见但从未提供的内容.
例如,Powershell拥有一套出色的社区扩展,涵盖了包装盒中未包含的众多附加功能.没有它我不会使用Powershell.
我想也许SQLCLR有类似的东西.我正在寻找像这样的东西:
有没有人知道一个具有这种常见常规功能的库,我们都会反复写一遍?
我读了一篇关于在sqlserver中使用CLR集成的文章,并想知道一些潜在的问题可能是什么,如果有的话.我的想法是用它来验证遗留数据库中的潜在坏数据.一个例子是电话号码栏中的人名.
编辑:我认为没有任何问题,但这不是我看到很多讨论的事情,并且想要确保我没有打开一个可以在以后引起问题的蠕虫.我问的原因是我的DBA看着我,就像我问起这个时我疯了似的.
我是一名C#开发人员,他在T-SQL中完成了一些基本的数据库工作.但是,我需要编写一个非常复杂的存储过程,远高于我的T-SQL知识.
使用.net CLR作为SQL Server 2008的一部分在C#中编写存储过程会导致我的存储过程效率低于在T-SQL中编写的存储过程吗?差异(如果有的话)是否显着?为什么?
我需要编写一个布尔逻辑解析器,它将布尔逻辑语言转换为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) 是否可以在SQL Server CLR项目中创建具有nvarchar(max)类型的输入参数的CLR存储过程?
如果您定义存储过程:
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub MyProcedure(ByVal param1 As String)
然后在部署它时,param1的类型为NVarchar(4000).有没有办法让它成为NVarchar(最大)?
希望大家度过美好的一天!
我需要你对过去三天我一直在考虑的事情提出建议.我有一个用非托管平台编写的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服务.通过这种方式指导我的每一个建议将不胜感激.
谢谢你们.
如果我在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) 我目前正在编写自己的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#中构建了一个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以反映正确的程序集?
任何帮助是极大的赞赏。
我们正在使用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.在此之后,我收到以下错误:
它指向错误的文件是AddressFormatting.dll
sqlclr ×10
sql-server ×7
c# ×4
.net ×3
clr ×2
com ×1
encryption ×1
gac ×1
parsing ×1
sqldatatypes ×1
t-sql ×1
types ×1