将SQL Server查询转换为Delphi语法

| 这是有效的原始SQL Server查询:
use HIS

SELECT
room_type,rate_start_date,rate_end_date,rate
, DATEDIFF(DAY,case when rate_end_date < \'2011.08.21\'
then \'2011.08.19\'
else rate_start_date
end,
case when rate_start_date > \'2011.08.19\'
then \'2011.08.21\'
else rate_end_date
end
) AS days FROM room_rates
WHERE room_type = \'DBLMS\' AND rate_start_date <= \'2011.08.21\'
AND rate_end_date > \'2011.08.19\'
我将其转换为Delphi SQL:
procedure TForm1.Button1Click(Sender: TObject);
begin
uniQuery1.Close;
uniQuery1.SQL.Clear;
uniQuery1.SQL.Add(\'SELECT room_type,rate_start_date,rate_end_date,rate,\');
uniQuery1.SQL.Add(\'DATEDIFF(DAY,case when rate_end_date < 2011.08.21 then 2011.08.19 else rate_start_date end,\');
uniQuery1.SQL.Add(\'case when rate_start_date > 2011.08.19\');
uniQuery1.SQL.Add(\'then 2011.08.21 else rate_end_date end) AS days FROM room_rates\');
uniQuery1.SQL.Add(\'WHERE room_type = DBLMS AND rate_start_date <= 2011.08.21\');
uniQuery1.SQL.Add(\'AND rate_end_date > 2011.08.19\');
uniQuery1.Open;
end;
但是我得到\'Invalid column NAME \'DBLMS \'\' 我在这里想念什么? DBLMS不是一列。     
已邀请:
        您没有引用sql语句中的字符串,请尝试将代码重写为此:
procedure TForm1.Button1Click(Sender: TObject);
begin
  uniQuery1.Close;
  uniQuery1.SQL.Clear;
  uniQuery1.SQL.Add(\'SELECT room_type,rate_start_date,rate_end_date,rate,\');
  uniQuery1.SQL.Add(\'DATEDIFF(DAY,case when rate_end_date < \'\'2011.08.21\'\' then \'\'2011.08.19\'\' else rate_start_date end,\');
  uniQuery1.SQL.Add(\'case when rate_start_date > \'\'2011.08.19\'\'\');
  uniQuery1.SQL.Add(\'then \'\'2011.08.21\'\' else rate_end_date end) AS days FROM room_rates\');
  uniQuery1.SQL.Add(\'WHERE room_type = \'\'DBLMS\'\' AND rate_start_date <= \'\'2011.08.21\'\'\');
  uniQuery1.SQL.Add(\'AND rate_end_date > \'\'2011.08.19\'\'\');
  uniQuery1.Open;
end;
作为其他建议,请尝试使用参数而不是字符串文字,以这种方式,除了其他优点之外,您还可以保护代码免受sql注入。查看本文
Using Parameters in Queries
    

要回复问题请先登录注册