使用动态SQL检查存储为列值和输出值的逻辑条件

时间:2015-07-24 07:06:39

标签: sql-server dynamic-sql

此问题与类似问题which I came across on SO

有关

我的问题是简化这个问题。

假设我的表中有一列包含如下逻辑条件:

enter image description here

select '200 > 100'checkit, '' result into SomeTable
union
select '200 > 100', ''
union
select '123 > 100', ''
union
select '200 > 500', ''
union
select '1 > 10', ''

我想要做的是检查这些条件并在输出中添加一个列,告诉条件是真还是假。

这样的事情:

输出

enter image description here

但如果可能,我希望使用Dynamic SQL

修改

一种方法是使用RBAR并使用游标或循环。然后将此列的值存储在某个临时变量中。然后使用动态sql执行它。

事情是我不想一行一行。我正在寻找更好的方法。

2 个答案:

答案 0 :(得分:1)

我在CASE的帮助下尝试过它对我有用 首先,我们必须从'>'中拆分价值然后我们必须在INT中转换它然后我们可以在CASE的帮助下进行比较

 CREATE TABLE checkit
    ([checkit] varchar(50))
;

INSERT INTO checkit
    ([checkit])
VALUES
    ('10 > 100'),
    ('123 > 100'),
    ('200 > 100'),
    ('200 > 500')
;

SELECT checkit, SUBSTRING(checkit,1,CHARINDEX('>',checkit)-1),
SUBSTRING(checkit,CHARINDEX('>',checkit,0) + 1, LEN(checkit)-CHARINDEX('>',checkit,0)),
'IsTrue' =
    CASE 
    WHEN CAST(SUBSTRING(checkit,1,CHARINDEX('>',checkit)-1) as int) > CAST(SUBSTRING(checkit,CHARINDEX('>',checkit,0) + 1, LEN(checkit)-CHARINDEX('>',checkit,0)) as int)
    THEN 1 
    ELSE 0
    END
FROM checkit

答案 1 :(得分:0)

这应该有效:

DECLARE @dSQL nvarchar(MAX)

SELECT @dSQL = COALESCE(@dSQL + ',', '') +
  '(''' + checkit + ''',CASE WHEN ' + checkit + ' THEN ''TRUE'' ELSE ''FALSE'' END)'
FROM checkit

SET @dSQL = 'SELECT * FROM (VALUES' + @dSQL + ') v(checkit,result)'

EXEC sp_executesql @dSQL

这里是fiddle