Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何处的SQL Server动态条件_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

何处的SQL Server动态条件

何处的SQL Server动态条件,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,假设我有两张桌子: 学生:身份证、姓名、年龄、班级等 条件:Id,条件 列Conditions.Condition包含一个SQL条件,例如std.Age>2或std.Class=3 我想要一个能做到以下几点的东西: SELECT std.Id as StudentId, con.Id as ConId FROM Students as std, Condition as con WHERE con.Condition 可能是一个接受学生Id的函数 我如何做到这一点 学生:

假设我有两张桌子:

学生:身份证、姓名、年龄、班级等 条件:Id,条件 列Conditions.Condition包含一个SQL条件,例如std.Age>2或std.Class=3

我想要一个能做到以下几点的东西:

SELECT std.Id as StudentId, con.Id as ConId
FROM   Students as std,
       Condition as con
WHERE  con.Condition
可能是一个接受学生Id的函数

我如何做到这一点

学生:

1 , Yossi, 25, 3..
2 , David, 22, 3..
3 , Jhon, 5, 2..
4 , Smith, 25, 4..
条件:

1 , Age > 3
2 , Class = 4
3 , Name LIKE '%i%'
结果将是条件,Studnet:

(1,1) (1,2) (1,3) (1,4) // all are older than 3
(2,4)                   // only Smith is in class 4
(3,1) (3,2) (3,4)       // all except jhon have an i in their name
尝试以下查询:

DECLARE @CONDITIONS varchar(max) =
REPLACE(REPLACE((
SELECT'UNION ALL SELECT ID AS STUDENTID , ' + CONVERT(VARCHAR , ID ) + ' AS CONDITIONID FROM STUDENTS WHERE ' + CONDITION + ' ' 
FROM CONDITION
FOR XML PATH('')
) , '&LT;' , '<') , '&GT;' , '>') 

SET @CONDITIONS = (SELECT SUBSTRING(@CONDITIONS , 11 , LEN(@CONDITIONS)))

EXEC(@CONDITIONS)
这是应用条件的更一般化的方法。如果您只想应用一个条件,那么在查询中添加where子句,从中获取所有条件。您可以针对一个或多个条件运行此查询。目前我已经编写了这个应用所有条件的查询


您必须构建一个包含条件的字符串,然后执行它。这就是所谓的动态SQL

例如:

 DECLARE @sql Varchar(400)

 SELECT @sql = 'SELECT * FROM MyTable WHERE ' + condition
  FROM Conditions
 WHERE cond_key = 1

 -- This will yield you a full SQL statement, if the condition record
 -- is there.

 EXECUTE(@sql)            -- And this will execute it

条件表中有多少个条件?不要太多。。。但是我希望它们是动态的,你希望像sql这样的东西,quere会在执行时检查所有的条件,对吗?你能把一些数据放在这里,这样我就可以得到batter了吗idea@HirenDhaduk编辑question@AK_你核对我的答案了吗?这就是你想要的吗?告诉我你是否需要进一步的定制,或者这个查询是否完美?我现在正在评估你的答案,以了解我的真实用例。。。我可能会用一些稍微不同的东西。。。但这是一个很好的解决方案…谢谢,我总是试图找到最好的解决方案。事实上,我正在使用NHibernate访问数据库。我最初的方向是可能使用“联接”,但如果唯一的解决方案是对条件的所有采石场进行“并集”,那么我将单独创建它们,并使用多查询或其他方法运行它们。这一方法仅用于返回一行。请求是针对多行的,但事实并非如此:它将执行构造的SQL语句,并返回该语句将返回的任何内容。这个例子只是为了说明如何使用动态SQL。很抱歉,HirenDhaduk的一个结论是,他要求学生和他们回答的条件进行配对。您创建动态SQL的where子句将其约束为一个条件。我是在响应OP,而不是其他人的评论。这是我要朝的方向,但我在使用查询语句时遇到了问题。。。