Sql server 计算多个表达式,如果为true,则继续下一个id

Sql server 计算多个表达式,如果为true,则继续下一个id,sql-server,tsql,dynamic-sql,Sql Server,Tsql,Dynamic Sql,我有两个SQL表,如下所示: 1.噪音 噪音识别码 价值 2. 73 7. 57 8. 78 12 86 14 89 您需要将标准拆分为单独的列:定义比较应该是什么,以及定义要比较的值的标准 然后可以分别比较每个可能的运算符 之后,它只是一个简单的每组前1名查询 选择 n、 噪音识别码 n、 [价值], c、 着色剂 来自噪音 交叉应用 选择Top1 c.ColorInt 从c色开始 哪里 c、 Op='='和n.[Value]>=c.标准 由c.SortOrder订购 C 您说您不能修改“条件

我有两个SQL表,如下所示:

1.噪音

噪音识别码 价值 2. 73 7. 57 8. 78 12 86 14 89 您需要将标准拆分为单独的列:定义比较应该是什么,以及定义要比较的值的标准

然后可以分别比较每个可能的运算符

之后,它只是一个简单的每组前1名查询

选择 n、 噪音识别码 n、 [价值], c、 着色剂 来自噪音 交叉应用 选择Top1 c.ColorInt 从c色开始 哪里 c、 Op='='和n.[Value]>=c.标准 由c.SortOrder订购 C 您说您不能修改“条件”列。那我们就得自己分了

我假定值总是在开始,比较器在中间,并且有空间。否则这将失败

选择 n、 噪音识别码 n、 [价值], c、 着色剂 来自噪音 交叉应用 选择Top1 c.ColorInt 从c色开始 交叉应用值 CASTRIGHTc.Criteria,CHARINDEX“”,REVERSEc.Criteria-1为int-与n.Value的数据类型相同 vCriteriaNum 哪里 c、 “%=%”和n.[Value]>=v.CriteriaNum等条件 由c.SortOrder订购 C
标准是什么?预期的结果是什么?根据问题指南,请说明您尝试了什么,并告诉我们您在本网站或其他地方发现了什么,以及为什么它不满足您的需要。您的列标准是否真的具有值N'[值]<75'?如果是这样的话,唯一的方法就是使用动态SQL,我强烈建议不要这样做。如果你真的这样做了,我希望你有很好的流程来确保列中的表达式不能执行任何形式的注入。如果没有,那么就不要接近动态解决方案;修正设计,这才是真正的解决方案。如果你还有其他的操作,你也应该把它包括在问题中,但是,这只会让我的观点更加有力;这是需要改变的设计。除非您真正了解使用动态SQL所做的事情,并且对进入列中的数据采取了安全措施,否则使用动态SQL只会是一个巨大的安全缺陷。@Larnu游荡的目标帖子就是这样。我认为这些人已经离开了球场。我放弃了。提示OP,在本例中,列的名称值可以是动态的,像BETWEEN这样的操作符也可以在其中。叮叮!我们赢了@Charlieface和Larnu感谢您的反馈!我刚刚更新了问题并发布了我尝试过的代码。太棒了!谢谢@Charlieface的帮助!我在代码中遇到了一个小问题,因此需要将CASTRIGHTc.Criteria、CHARINDEX“”、REVERSEc.Criteria-1作为int调整为CASTRIGHTc.Criteria、LENc.Criteria castpatINDEX“%[0-9]”、c.Criteria作为int+1作为int