MSSQL:C# 函数可以实现视图吗?

Posted

技术标签:

【中文标题】MSSQL:C# 函数可以实现视图吗?【英文标题】:MSSQL: Can a C# function implement a view? 【发布时间】:2017-02-13 08:40:03 【问题描述】:

对于使用 MS SQL 服务器的现有应用程序,是否可以实现将映射为 SQL 表的 C# 功能?

换句话说,能否从旧版 SQL 查询中查询 C# 功能,使其表现得就像 SQL 表在那里一样?

动机:我有大量压缩数据的 blob(在其他地方存档为文件)。我想替换现有的庞大 SQL 表,以便在后台从存档中提取数据。

把 SQL 表想象成一个可以像普通表一样查询的缓存。当缓存未命中时,通过C#代码提取数据,填充缓存中缺失的数据,然后才执行真正的SQL查询。

该操作不是时间关键的。这样,即使是更简单的解决方案也是可以接受的——当 SQL 查询出现时,参数以某种方式传递给 C# 函数,该函数用提取的数据填充空表,然后执行 SQL 查询并返回数据。

在 MS SQL 服务器上是否有可能?

【问题讨论】:

也许你看起来像:***.com/questions/13420305/… 补充:只使用内置的FILESTREAM功能,无需自定义CLR实现。 我明白了。我唯一能想到的是一个由 sql 编程任务调用的 .net 程序(或者可能使用触发器?),它可以保持更新的视图以及您需要的所有转换.... 我建议然后使用 View 隐藏的表值函数。然后用法是 select * from myView;我认为,您的遗留软件要求将得到满足。我对这个解决方案的性能有些怀疑,但你可以试试。 顺便说一句,前段时间我问过类似的问题:***.com/questions/31625273/… 有些人认为,这种类型的问题并不常见 - 问题评级为 -1 :-) 【参考方案1】:

您可以使用partial class 实现这一目标。

public partial class MyTable

    public byte[] HeavilyCompressedData
    
        get
        
            //loading and returning large data
         
    

请记住,您不能在 LINQ 中为此属性 (The specified type member is not supported in LINQ to Entities) 编写条件,但我认为您不想这样做。

【讨论】:

感谢您的帮助。但我知道从 SQL 调用 C# 代码的可能性。这就是我考虑在 C# 中实现的原因。问题是调用是否可以透明地连接到现有的 SQL 查询中。换句话说,如果SELECT * FROM xxx 可以在内部调用代码。也就是说,如果xxx 的内容可以从代码中获取,而不是从表格中获取。 (比如说,xxx 是一个视图。)

以上是关于MSSQL:C# 函数可以实现视图吗?的主要内容,如果未能解决你的问题,请参考以下文章

MSSQL之八 实现视图与索引

如何在 mssql 服务器视图中查询访问表

为啥MYSQL很少人用视图,MYSQL的视图和MSSQL的视图有啥本质区别。

powershell 使用PowerShell导出MSSQL架构。此脚本将导出表,存储过程,触发器,函数和视图的模式定义

MSSQL -- 使用 PK 创建视图

使用 php 连接到 MSSQL 数据库视图