标签: sqlclr

访问TSQL从CLR存储过程创建了#temp表.可能吗?

  1. 我有一个TSQL存储过程tsql__sp__A,它做了两件事:

(a)创建一个临时表#tempTable,它具有来自复杂SELECT查询的SELECT数据.

(b)为行参数计算的每一行调用CLR管理的存储过程clr__sp__B.

问题:是否可以 使用相同的连接上下文从CLR过程clr__sp__B访问#tempTable?(不,我不想在托管程序中移动或创建另一个#tempTable)

谢谢.

t-sql sqlclr temp-tables

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

使用.Net 3.5程序集SQL 2005 CLR?

我有一个CLR存储过程,它引用在VS 2008中使用Linq创建的程序集.让我们称这个程序集为'MyLib'.

我似乎无法将"MyLib"放入我的SQL 2005数据库中.我做以下事情:

CREATE ASSEMBLY [MyLib]
    FROM 'C:\MyLib\bin\Release\MyLib.dll'
WITH PERMISSION_SET = UNSAFE
GO
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

Assembly 'MyLib' references assembly 'system.core, version=3.5.0.0, 
culture=neutral, publickeytoken=b77a5c561934e089.', which is not present 
in the current database. SQL Server attempted to locate and automatically 
load the referenced assembly from the same location where referring assembly 
came from, but that operation has failed (reason: 2(error not found)). Please
load the referenced assembly into the current database and retry your request.
Run Code Online (Sandbox Code Playgroud)

是否有更简单的方法将所有.Net 3.5程序集放入SQL 2005 CLR中,除了我为每个程序写出'CREATE ASSEMBLY'命令?这样做有一些"最佳实践"方式吗?

.net sql-server clr sqlclr

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

是否可以反编译SQL Server CLR存储过程程序集?

我们有一些内部专有数据库CLR存储过程(MSSQL 2005),这些过程是由一位前雇员拼凑而成的,他们错位(但从未检入)用于构建程序集的.NET源代码。这些没有被混淆。

是否可以将程序集反向工程为可以编辑源代码并重新编译的状态?

.net sql-server decompiling sqlclr

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

部署期间CLR存储过程的架构

我对配置Visual Studio(2010)感兴趣,因此在部署C#CLR数据库项目时,它将把内容放入DBO之外的其他架构中。我知道我可以更新它手动创建的函数/过程/等...包装程序来实现此目的: CLR存储过程:如何设置模式/所有者?

但是,我真的很想以某种方式自动化该过程。如果有人知道,我将非常感谢您的回答!

sql-server sqlclr sql-server-data-tools

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

尝试从SQL CLR内部执行sql时出错

我有以下代码:

[SqlFunction(DataAccess = DataAccessKind.Read, SystemDataAccess = SystemDataAccessKind.Read)]
    public static int GetInt()
    {
        int retValue = 0;
        using (SqlConnection conn = new SqlConnection("context connection = true"))
        {
            conn.Open();
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select MyInt from SomeTable";
            object timeOut = cmd.ExecuteReader(); // <- error happen here

        }
        return retValue;

    }
Run Code Online (Sandbox Code Playgroud)

我得到以下例外

cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

{"此语句试图访问其访问受程序集限制的数据."}

sqlclr

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

SQL71501:触发器:[dbo].[TriggerName]有一个未解析的对象[dbo]的引用.[TableName]

我有一个带有一些函数和触发器的SQL项目.

在Visual Studio 2010中,我只能指定数据库连接字符串和部署.这很有效.

但是现在迁移到Visual Studio 2013后,当我尝试构建项目时,在生成的sql文件中出现了很多这样的错误:

SQL71501: Trigger: [dbo].[TriggerName] has an unresolved reference 
to object [dbo].[TableName]
Run Code Online (Sandbox Code Playgroud)

该如何修复?

clr sqlclr sql-server-2008-r2 visual-studio-2013

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

启用CLR仍然不允许我在sql server上运行代码

我正在使用以下命令尝试在SQL Server 2008实例上启用CLR

EXEC sp_configure 'clr enabled', 1
GO

RECONFIGURE
GO
Run Code Online (Sandbox Code Playgroud)

但我仍然得到以下错误

禁用.NET Framework代码的执行.设置"clr enabled"配置选项并重新启动服务器

我还需要做其他事吗?

c# sql-server sqlclr sql-server-2008

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

基于.net ComputeHash的SQL CLR功能不适用于Cyrrilic

我编写了以下SQL CLR函数,以便散列大于8000字节的字符串值(T-SQL内置HASHBYTES函数的输入值的限制):

[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true)]
public static SqlBinary HashBytes(SqlString algorithm, SqlString value)
{
    HashAlgorithm algorithmType = HashAlgorithm.Create(algorithm.Value);

    if (algorithmType == null || value.IsNull)
    {
        return new SqlBinary();
    }
    else
    {
        byte[] bytes = Encoding.UTF8.GetBytes(value.Value);
        return new SqlBinary(algorithmType.ComputeHash(bytes));
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于拉丁字符串.例如,以下哈希值是相同的:

SELECT dbo.fn_Utils_GetHashBytes ('MD5', 'test'); -- 0x098F6BCD4621D373CADE4E832627B4F6
SELECT HASHBYTES ('MD5', 'test');                 -- 0x098F6BCD4621D373CADE4E832627B4F6
Run Code Online (Sandbox Code Playgroud)

问题是它不适用于西里尔字符串.例如:

SELECT dbo.fn_Utils_GetHashBytes ('MD5 ', N'???????? ?? ????????') -- NULL
SELECT HashBytes ('MD5 ',N'???????? ?? ????????') -- 0x838B1B625A6074B2BE55CDB7FCEA2832

SELECT …
Run Code Online (Sandbox Code Playgroud)

.net c# t-sql hash sqlclr

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

如何将参数传递给外部(SQLCLR)SQL Server触发器

我创建了一个调用这样的程序集的Trigger:

CREATE TRIGGER Testrigger ON STATION  
FOR INSERT 
AS EXTERNAL NAME assemblytest.[WriteTimeInfile.Program].Testrigger 
Run Code Online (Sandbox Code Playgroud)

该程序集中的.NET代码执行如下操作:

namespace WriteTimeInfile
{
    public class Program
    {
        [SqlTrigger(Name = @"Testrigger", Target = "[dbo].[STATION]", Event = "FOR INSERT, UPDATE, DELETE")]
        public static void Testrigger()
        {
            File.AppendAllText(@"C:\Users\Vivien\date.txt",
            DateTime.Now.ToString() + Environment.NewLine);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够作为参数传递创建的行或更新的行,如下所示:

CREATE TRIGGER Testrigger ON STATION  
AFTER INSERT 
AS 
EXTERNAL NAME assemblytest.[WriteTimeInfile.Program].Testrigger (STATION.ID)
Run Code Online (Sandbox Code Playgroud)

我在StackOverflow上发现了一个7年的主题,它告诉我们无法将参数传递给CLR程序集.
我在问最近的SQL Server版本是否可行.

你知道是否有办法,如果是的话怎么办?

.net t-sql sql-server sqlclr database-trigger

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

AWS SQL Server 2017 RDS上的SQLCLR支持

我需要在AWS SQL Server 2017 RDS中加载程序集。

我无法在文档中找到它。这可能吗?如果是,那怎么办?

这与“ AWS中的SQL Server CLR存储过程? ” 类似,但不是重复的,因为我需要在SQL Server 2017 AWS中创建程序集,并且clr enabled在此版本中无法将参数更改为1,并且这不是在该问题或答案中解决。

sql-server sqlclr amazon-rds

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