其如下图所示 (A表)
只显示出Sql字段的结果为true的数据
不要用存储过程,请问能实现吗?
可以使用CLR程序来解决
启动VS,新建一个项目,选择数据库-SQL Server-Virtual C# SQL CLR数据库项目
配置你当前的数据库连接(也可以不连接,在编译完成以后自行添加也行)
在解决方案资源管理器中添加一个用户自定义函数,将让你编辑cs文件
写入如下代码:
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
就我所知,肯定是没有现成的办法来完成这个判断的。
我想了2个办法:
自己编写一个函数,比如fcheck(sql),传入 逻辑 字符串(比如1=1), 进行逻辑计算,为真则返回1,为否则返回0 (这个比较难写,有没有可能通过动态sql来实现)
用的时候就方便了:
select * from a where fcheck(sql) = 1
用存储过程,存储过程中用 动态语法,将 sql内容 放进去,获得返回结果。
不成熟的想法,仅供参考。
追问谢谢您,但函数里面是不能用动态sql语句的
追答那就 只能自己做 语法解析 ,进行 逻辑计算 了