标签: sqlclr

SQL CLR触发器可以执行此操作吗?或者,还有更好的方法?

我想编写一个监视数据库表的服务(可能在c#中).当记录插入表中时,我希望服务获取新插入的数据,并使用它执行一些复杂的业务逻辑(对于TSQL来说太复杂).

一种选择是让服务定期检查表以查看是否已插入新记录.这样做的问题是我希望服务一旦发生就知道插件,我不想杀死数据库性能.

做一点研究,似乎写一个CLR触发器可以完成这项工作.我可以在c#中编写触发器,当插入发生时触发,然后将新插入的数据发送到Windows或WCF服务.

您认为,SQL CLR触发器的良好(甚至可能)使用是什么?

关于如何实现这一目标的任何其他想法?

sql t-sql sql-server triggers sqlclr

7
推荐指数
1
解决办法
4631
查看次数

如何在存储过程中调用C#函数

SQL Server 2005支持CLR,这意味着我们可以在后端使用CLR,所以如何做到这一点,我在c#中有一些函数,它使用日期时变量做一些复杂的操作,现在我想在SP中使用这些函数.首先,有可能做到这一点.

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

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

F#核心库是否可以获得SQLCLR批准?

根据这个帖子,F#Core必须经SQLCLR批准才能标记组件SAFE.这是计划好的吗?甚至可以做到吗?

f# sqlclr

7
推荐指数
1
解决办法
418
查看次数

无法将SQLCLR程序集添加到数据库,Msg 300

我在将SQLCLR程序集添加到数据库时遇到了问题,但是我的同事没有问题.虽然我们确实有不同级别的访问权限,但我们无法弄清楚为什么我收到了错误消息.

这是我的代码:

USE [mydatabase]
GO

CREATE ASSEMBLY [My.Assembly]
AUTHORIZATION [dbo]
FROM 'C:\Program Files\MyStuff\My.Assembly.dll'
WITH PERMISSION_SET = UNSAFE
GO
Run Code Online (Sandbox Code Playgroud)

这是我的错误:

Msg 300,Level 14,State 1,Line 3
UNSAFE ASSEMBLY权限被拒绝对象'服务器',数据库'master'.

思考?

sql-server permissions sqlclr sql-server-2008

7
推荐指数
2
解决办法
5180
查看次数

Visual Studio 2013 CLR存储过程

我一直在使用早期版本的Visual Studio(VS2008)和SQL Server 2008.

最近我的组织搬到了VS2013和SQL Server 2012.我发现VS2013中的数据库接口与VS2008中的数据库接口有很大的不同.

我的问题基本上是,如果有人知道一篇文章或引用,详细说明如何做这里描述的内容:

http://yassershaikh.com/how-to-create-a-clr-stored-procedure-using-c-and-visual-studio/

(特别是将DLL部署到SQL Server 2012数据库).

但是使用VS2013和SQL Server 2012.

sql-server stored-procedures sqlclr visual-studio-2013

7
推荐指数
1
解决办法
1万
查看次数

SQL Server CLR集成是否支持配置文件?

我使用SQL Server CLR集成来创建一个ASSEMBLY.

加载命令: CREATE ASSEMBLY TcpClr FROM 'G:\TcpClrTest.dll' WITH PERMISSION_SET = UNSAFE

没有App.Config

DLL代码包含: string ip=ConfigurationManager.AppSettings["connection"].ToString();

App.config还包含:

<appSettings> <add key="connection" value="127.0.0.1"/> </appSettings>

但是当我执行PROCEDURE时,SQL Server显示错误 System.NullReferenceException

SQL Server CLR集成是否支持App.config文件?

c# sql-server configurationmanager sqlclr configuration-files

7
推荐指数
1
解决办法
4443
查看次数

以编程方式读取SQL Server的查询计划建议的SQL特定执行索引?

如果我在SSMS中运行此命令:

set showplan_xml on
GO
exec some_procedure 'arg1', 'arg2','arg3'
GO
set showplan_xml off
GO
Run Code Online (Sandbox Code Playgroud)

我获得了查询执行中涉及的完整调用堆栈的XML输出,以及任何建议的索引等.

怎么可能从C#中读到这个?

(一个用例可能是定期启用此功能并在生产环境中记录这些结果,以便密切关注索引建议.)

c# sql-server sqlclr sql-execution-plan

7
推荐指数
1
解决办法
1238
查看次数

如何说服sql server 2008r2使用clr v4.0而不是v2.0?

我有sql server 2008r2.根据我的互联网研究,它支持.net framework 4.0.我试图用sql clr函数安装我的程序集并收到错误.

程序集"MyAssembly"的CREATE ASSEMBLY失败,因为程序集是为不支持的公共语言运行时版本构建的.

询问

select * from sys.dm_clr_properties
Run Code Online (Sandbox Code Playgroud)

给出结果:

目录C:\ Windows\Microsoft.NET\Framework64\v2.0.50727\

版本v2.0.50727

CLR已初始化

我检查C:\ Windows\Microsoft.NET\Framework64 \以确定并找到v4.0.30319文件夹所在的位置.所以,安装了.net v4.0.

所以,我需要更改用于sql的CLR版本.我试过了

sp_configure 'clr enabled', 0;
GO
RECONFIGURE;
GO

sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
Run Code Online (Sandbox Code Playgroud)

它没有帮助.我尝试添加带有内容的sqlservr.exe.config

<configuration>
   <startup>
      <requiredRuntime version="v4.0"/>
   </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

到C:\ Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn文件夹并重新启动sql server.它没有帮助.

我知道创建注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\OnlyUseLatestCLR并将其设置为1的选项.它可以打破其他解决方案,所以我很害怕在生产中使用它.

有什么建议如何说服sql server使用clr v4.0?

所以,答案是 - 哪里无法做到.

在我的情况下,我将目标框架降低到3.5并排除了一些clr函数.

.net sql-server sqlclr sql-server-2008-r2

7
推荐指数
1
解决办法
3441
查看次数

从SQL CLR调用Web服务?

我有一个返回表的SQL Server 2012存储过程.我必须修改该SP以向返回的表添加其他值.不幸的是,这种附加值来自对Web服务的调用.从我的研究中,我收集主要的方法是在SQL中使用OLE自动化程序(sp_OA ...),或者使用SQLCLR存储过程.给定sp_OA ...过程运行的安全上下文,单个返回值是VARCHAR(10)注册密钥,并且对服务的调用很少(每小时10到20个),我猜测SQLCLR方法是要走的路.此外,Web服务托管在我们的Intranet上,外部世界无法访问.

有没有更好的方法来完成我需要的东西?更好的意思是更高性能,更好的安全性,更容易编码和维护

c# sql-server stored-procedures web-services sqlclr

7
推荐指数
1
解决办法
1万
查看次数

c#SqlDecimal在小数字的乘法中翻转符号

看来我正在用'我最喜欢的数据类型'SqlDecimal遇到更多困境.我想知道这是否应该被认为是一个错误.

当我在SQL中乘以两个小数字时,我得到了预期的结果.当我通过SQLCLR函数运行相同的数字时,结果非常令人惊讶.

c#代码:

using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

namespace TestMultiplySQLDecimal
{
    public static class Multiplier
    {
        [SqlFunction(DataAccess=DataAccessKind.None, IsDeterministic = true,IsPrecise = true)]
        public static SqlDecimal Multiply(SqlDecimal a, SqlDecimal b)
        {
            if (a.IsNull || b.IsNull) return SqlDecimal.Null;
            return a*b;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

SQL代码:

USE tempdb
GO
IF DB_ID('test') IS NOT NULL DROP DATABASE test
GO
CREATE DATABASE test
GO
USE test
GO

CREATE ASSEMBLY TestMultiplySQLDecimal 
FROM 'C:\Users\tralalalaa\Documents\visual studio 2015\Projects\TestMultiplySQLDecimal\TestMultiplySQLDecimal\bin\Release\TestMultiplySQLDecimal.dll'
WITH PERMISSION_SET = SAFE
GO

CREATE FUNCTION dbo.fn_multiply(@a decimal(38,8), @b decimal(18,8)) …
Run Code Online (Sandbox Code Playgroud)

c# sql-server sqlclr

7
推荐指数
1
解决办法
213
查看次数