SqlServer中的数据根据该表中某字段的值的结果决定是否显示

其如下图所示 (A表)

只显示出Sql字段的结果为true的数据
不要用存储过程,请问能实现吗?

可以使用CLR程序来解决

 

    启动VS,新建一个项目,选择数据库-SQL Server-Virtual C# SQL CLR数据库项目

    配置你当前的数据库连接(也可以不连接,在编译完成以后自行添加也行)

    在解决方案资源管理器中添加一个用户自定义函数,将让你编辑cs文件

    写入如下代码:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlBoolean Parse(string condition)
    {
        // 在此处放置代码
        DataTable dt = new DataTable("TestTable");
        dt.Columns.Add("ID");
        dt.Rows.Add(1);
        if (dt.Select(condition).Length > 0)
            return new SqlBoolean(true);
        else
            return new SqlBoolean(false);
    }
};

5. 如果是绑定了数据库,则直接在解决方案资源管理器处右键,选择部署。如果没有绑定数据库,则先进行编译,然后再进入到SQL Server数据库-可编程性-程序集中,添加本地的已编译的dll文件

6. 在SQL Server Management Studio的服务器处,右键,选择“方面”,然后在弹出窗口中将下拉框选择至“外围应用配置器”(这里我使用的是SQL Server 2008,印象当中SQL Server 2005的配置方法略有不同,需要进入到开始菜单中去寻找),然后再打开clrIntergrationEnabled,将其设置为true

7.执行如下语句:

Select * from C Where dbo.Parse(C.SQL)=1

需要说明的是,我建的数据表名为C,里面有三个字段对应的是你那三个字段。

8. 结果如下:

 

如果不明白,可以回复消息给我。以上代码在VS2010+SQL Server 2008中测试通过。

追问

谢谢您的帮助,发现SQLServer已经集成该功能了,原理应该一样,调用的是vbscript

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-23

就我所知,肯定是没有现成的办法来完成这个判断的。

 

我想了2个办法:

 

    自己编写一个函数,比如fcheck(sql),传入 逻辑 字符串(比如1=1), 进行逻辑计算,为真则返回1,为否则返回0  (这个比较难写,有没有可能通过动态sql来实现)

    用的时候就方便了:

    select * from a where fcheck(sql) = 1

    用存储过程,存储过程中用 动态语法,将 sql内容 放进去,获得返回结果。

     

不成熟的想法,仅供参考。

追问

谢谢您,但函数里面是不能用动态sql语句的

追答

那就 只能自己做 语法解析 ,进行 逻辑计算 了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网