【发布时间】:2018-09-17 09:29:33
【问题描述】:
我有一个非常奇怪的需求,我有一个包含一些条件的查询。这是一个示例。
SELECT FirstName, LastName, ConditionalColumn FROM Employee
WHERE LastName != 'Ciaz'
我想在ConditionalColumn 中显示WHERE 条件列值。
所以该列将包含Ciaz。
【问题讨论】:
-
但是你知道条件,所以你可以写
'Ciaz' AS ConditionalColumn。如果这是您并不总是知道条件的动态 SQL 方案的一部分,则必须将WHERE作为(转义!)字符串放入。 T-SQL 中没有可以将查询解析树的一部分复制到列中的功能,尽管使用SHOWPLAN获取执行计划是一个bit。 -
请在您的问题中添加一些示例数据。
-
@JeroenMostert 这实际上是动态的,否则它会非常简单
-
如果它是动态的,它仍然很简单,只要你控制机制。然而,如果您不控制该机制,则基本上该死的几乎是不可能的——您不能在 SQL 方面做到这一点,至少不能作为查询执行本身的一部分。
WHERE是如何构造的?更重要的是,你为什么需要这个?出于调试目的,SQL Profiler 或您的查询构建机制用于转储其查询的任何机制会更合适。 -
然后您正在查看生成后解析
WHERE子句,这与您的原始问题完全不同。有两种方法:使用 T-SQL 解析器(如TSqlParser类)解析整个查询,或者接受这是一种糟糕的业务方式,并更改前端,使其单独通过其搜索条件,成为由后端翻译成查询。毕竟,这就是有后端的原因。
标签: sql-server