标签: sqlclr

如何在CLR触发器中获取当前正在执行的命令的sql server用户名?

我知道SqlContext.WindowsIdentity返回正在执行命令的当前用户(在CLR触发器中),但是,这仅适用于经过Windows身份验证的用户.如果是sql server用户,我如何获得用户名?任何帮助表示赞赏.

sql-server sqlclr

3
推荐指数
2
解决办法
2万
查看次数

IN SQL Server是CLR Threadsafe

我在SQL Server和Exchange Web服务之间的CLR中有一个接口,用于在应用程序之间同步和发送电子邮件.在测试中,它没有任何问题地工作(编辑); 我们看到生产环境中的零星问题,其中较长的Web服务任务似乎已经重叠.

我的问题非常简单,我无法通过阅读MSDN上的CLR详细信息来决定 - 是CLR线程安全还是不开箱即用.

如果没有什么是最好的方式来调用CLR是线程安全的,那就是围绕我的程序进行解释,或者是否有一个不那么激烈的替代方案.


谢谢你的回复; 我们正在解决这个问题,而不是SQL问题,这是一个EWS /模拟问题.我们已经在系统上完成了一组新的负载测试,甚至在大量负载下(比应用程序到目前为止高出1000倍)我们无法看到内存泄漏/线程问题,这就是为什么我们现在正在寻找其他地方..

sql-server sqlclr thread-safety

3
推荐指数
1
解决办法
1909
查看次数

为什么在SQL Server CLR中运行一个函数会导致崩溃,同时在独立应用程序中正常工作?

下面这两个方法是相似的,除了一个处理空值而另一个不处理.要处理空值,它使用SqlString类型并检查"get_IsNull"属性.

为什么第一个"A .NET Framework error occurred during execution of user-defined routine or aggregate "CheckMailingAddress": ."在SQL CLR中运行时会导致错误,而第二个不在?

特别是,TSQL错误是 "Msg 10329, Level 16, State 49, Line 1 .Net Framework execution was aborted."

.method public hidebysig static bool CheckMailingAddress(valuetype [System.Data]System.Data.SqlTypes.SqlString param0) cil managed
{
   .maxstack 8
    L_0000: ldarga.s param0
    L_0002: nop 
    L_0003: nop 
    L_0004: call instance bool [System.Data]System.Data.SqlTypes.SqlString::get_IsNull()
    L_0009: brfalse L_0010
    L_000e: ldc.i4.1 
    L_000f: ret 
    L_0010: ldarga.s param0
    L_0012: nop 
    L_0013: nop 
    L_0014: call instance string [System.Data]System.Data.SqlTypes.SqlString::get_Value()
    L_0019: call class DatabaseValues.MailingAddress …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlclr

3
推荐指数
1
解决办法
2032
查看次数

SQL Server没有找到序列化程序集

我正在尝试部署一个调用Web服务的UpdateContries SQL CRL过程,请按照此处的帮助进行操作

所以基本上我在Visual Studio 2010上有一个Visual C#SQL CLR数据库项目,它有一个简单的过程调用外部Web服务,该服务被添加为Web引用.

我已将项目复制到包含SQL Server 2008数据库的远程服务器.

在项目属性中,我将生成序列化程序集设置为"打开",将数据库权限级别设置为"外部",并且已激活部署代码.

同样在项目中,我手动创建并删除序列化程序集,如下所示:

PreDeployScript.sql

IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'ReportsWebServicesXML')
    DROP ASSEMBLY [ReportsWebServicesXML];
GO
Run Code Online (Sandbox Code Playgroud)

PostDeployScript.sql

CREATE ASSEMBLY [ReportsWebServicesXML]
    FROM 'E:\Projects\Reports\ReportsWebServices\ReportsWebServices\bin\Debug\ReportsWebServices.XmlSerializers.dll'
    WITH PERMISSION_SET = SAFE;
GO
Run Code Online (Sandbox Code Playgroud)

项目构建和部署成功,我可以在Assembies文件夹下的Visual Studio 2010 Server资源管理器中看到ReportsWebServicesReportsWebServicesXML,但是当我尝试运行该过程时,它仍然返回以下错误:

Msg 6522, Level 16, State 1, Procedure UpdateContries, Line 0
A .NET Framework error occurred during execution of user-defined …
Run Code Online (Sandbox Code Playgroud)

serialization web-services sqlclr visual-studio-2010 sql-server-2008

3
推荐指数
1
解决办法
5142
查看次数

如何查找在SQL Server中注册的程序集?

我有一个在SQL Server中注册的程序集:

CREATE ASSEMBLY [CLRFunctions]
AUTHORIZATION [dbo]
FROM  0x4D5A90000300000...
WITH PERMISSION_SET = SAFE
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到这个组件的路径?

sql-server sqlclr sql-server-2008-r2

3
推荐指数
1
解决办法
8199
查看次数

SQL CLR执行错误

我正在使用visual studio 2012和MS SQL Server 2012.我创建了SQL CLR项目,并按照以下链接执行了以下步骤 :http://blogs.interfacett.com/how-create-net-stored-procedure-sql-server

现在,当我在附加触发器的表中插入数据时,会插入数据,但是我收到以下错误." 请求类型'System.Net.WebPermission,System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败. "

谁能告诉我,我怎么能解决它?

提前致谢.

.net sql sql-server clr sqlclr

3
推荐指数
1
解决办法
4414
查看次数

执行 CLR SQL 函数时出现问题

我创建了一个简单的 1 方法 DLL,使用内部 Web 服务将字符串地址转换为纬度/经度字符串。代码很简单:

public class GeoCodeLib
{
    [SqlFunction(IsDeterministic=false)]
    public SqlString GetLatLon(SqlString addr)
    {
        Geo.GeoCode gc = new Geo.GeoCode();
        Geo.Location loc = gc.GetLocation(addr.Value);
        return new SqlString(string.Format("{0:N6}, {1:N6}", loc.LatLon.Latitude, loc.LatLon.Longitude));
    }
}
Run Code Online (Sandbox Code Playgroud)

我的目标是.NET Framework 2.0。我们使用的是 SQL Server 2008 R2。该程序集已添加到数据库中(该程序集称为 GeoCodeSqlLib.dll)。我们没有对其设置任何权限。

我似乎无法调用它。我试过了:

select GeoCodeSqlLib.GeoCodeLib.GetLatLon('12143 Thompson Dr. Fayetteville, AR 72704')
Run Code Online (Sandbox Code Playgroud)

这给了我这样的信息,Cannot find either column "GeoCodeSqlLib" or the user-defined function or aggregate "GeoCodeSqlLib.GeoCodeLib.GetLatLon", or the name is ambiguous.

我试过了:

CREATE FUNCTION GetLatLon(@amount varchar(max)) RETURNS varchar(max) 
AS EXTERNAL NAME GeoCodeSqlLib.GeoCodeLib.GetLatLon
Run Code Online (Sandbox Code Playgroud)

这给了我这样的信息,Could …

c# sql-server sqlclr

3
推荐指数
1
解决办法
1453
查看次数

SQL CLR 函数返回可空布尔值

我正在尝试编写一个 SQLCLR 函数,它将返回一个可为空的布尔值。如果我像这样声明函数:public static SqlBoolean? IsTimeZoneDST(SqlString timeZone)那么在尝试使用程序集时会收到错误,指出返回值的类型不匹配。是否有我遗漏的东西,或者在这种情况下不可能返回可为空的布尔值?

.net c# sql-server nullable sqlclr

3
推荐指数
1
解决办法
1137
查看次数

从 C# SQLCLR 存储过程批量插入 SQL 表的最快方法

我有一个 C# SQLCLR 存储过程,其中首先将数据填充到一些字典中并进行计算,然后将输出存储在其他一些字典中。

由于使用了字典,该计算完成得非常快,并且完全证明了我需要使用 CLR 存储过程而不是普通的 SQL 存储过程。

然而,我必须将这些输出字典中的数据保存在 SQL 中的某些表中,这部分花费了很多时间,并且满足了我对整个 SQLCLR 过程更快的需求。

我必须迭代每个输出字典的每个键,然后必须创建插入查询,然后必须按以下方式运行 ExecuteNonQuery: 在此输入图像描述

那么我该如何改进我的这种方法,以便在插入数据时不需要花费时间。我无法使用SqlBulkCopy,因为它不接受进程内上下文连接(即"Context Connection = true;")作为连接字符串。那么还有其他更快的方法可用吗?提前致谢。

c# sql-server import sqlclr sql-server-2008

3
推荐指数
1
解决办法
5155
查看次数

反转TSQL中单词的顺序

我想知道如何(如果可能的话)颠倒从TSQL字符串(varchar)返回的单词的顺序.

我知道TSQL REVERSE函数,但也反转了单词中的字母,例如:

输入> We want to tell you we all love StackOverflow
输出>wolfrevOkcatS evol lla ew uoy llet ot tnaw eW

我想在TSQL中实际实现以下功能:

输入> We want to tell you we all love StackOverflow
输出>Stackoverflow love all we you tell to want We

我在任何地方找到的唯一一个稍微类似的问题是这个,但是包括拆分逗号分隔的字符串,我不需要这样做.

我确信有一种方法可以实现上述目标,即使它是自定义函数或SQL-CLR函数,任何帮助都将非常感激.

编辑:

我设法使用以下方法拆分我的字符串:

-- Create a space delimited string for testing
declare @str varchar(max)
select @str = 'We want to tell you we all love StackOverflow'
-- XML tag the …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2005 sqlclr

2
推荐指数
1
解决办法
6707
查看次数