|
数据库SQL SERVER 2008. 现在需要使用MICROSTRATEGY的FREE SQL 模式在SQL SERVER执行以下简单SQL语句: Select * from Sales where SaleDate>= Date_From Date_From是由Microstrategy控制的一个变量,与前台用户界面上的一个Date Picker控件绑定,无法人为改写。当前台用户界面上的Date Picker有值时,它会返回一个表示日期的字符串值,比如'2011-08-12'(注意:单引号也包含在返回的字符串内);当前台用户界面上的Date Picker为空时,它会返回一个空字符串。Microstrategy只对上述SQL语句中的变量进行简单的字符串替换后,即传递给SQL SERVER执行。 显然,当前台Date Picker为空时,我希望返回所有记录,所以我这样组织SQL: Select * from Sales where (Date_From='' or SaleDate>= Date_From) 该SQL 在Date Picker有值时正常执行,其变量替换后结果是: Select * from Sales where ('2011-08-01'='' or SaleDate>'2011-08-01') 但在无值时报语法错误,因为此时SQL语句变成了 Select * from Sales where (='' or SaleDate>) 好吧,那我给它加上两个单引号。现在我这样组织SQL: Select * from Sales where ('Date_From'='' or SaleDate>= 'Date_From') 结果反过来了,在无值时可以正常执行,而在有值时报语法错误,因为此时SQL变成了 Select * from Sales where (''2011-08-01''='' or SaleDate>''2011-08-01'') 那么如何才能构造一个SQL,使其在两种情况下均可以正常执行? 显然,如果Microstrategy 能在界面DatePicker为空时返回'' 而非空字符串,该问题就可以解决(或者使其在有值时返回的日期字符串两头不加单引号,也可以解决)。但是现在确实无法控制MicroStrategy的行为,我们只能构建SQL,而它来替换变量。这个问题能解决么? |