DECLARE @WHERES VARCHAR(1000)
DECLARE @a datetime
DECLARE @b datetime
DECLARE @c varchar(100)
set @a=N'2012-08-14 15:00:00'
set @b=N'2012-08-14 19:30:00'
set @c='CAA396ED-9DE2-4C80-B4A8-0BFBF3DBBC33'
--SET @WHERES='AND CompanyId='+@c+' AND GpsTime>='''+@a+''' AND GpsTime<='''+@b+''''if @@ERROR<>0
begin
 SET @WHERES=''
end问题一块看就明白,环境是sql2008,这蛋疼的引号让人很蛋疼。希望有同行可以拼接成功,并运行成功。

解决方案 »

  1.   


    DECLARE @WHERES VARCHAR(1000)
    DECLARE @a datetime
    DECLARE @b datetime
    DECLARE @c varchar(100)
    set @a=N'2012-08-14 15:00:00'
    set @b=N'2012-08-14 19:30:00'
    set @c='CAA396ED-9DE2-4C80-B4A8-0BFBF3DBBC33'
    SET @WHERES='AND CompanyId='+@c+' AND GpsTime>='+quotename(@a,'''')
    +' AND GpsTime<='+QUOTENAME(@b,'''')
    print @WHERES
    --AND CompanyId=CAA396ED-9DE2-4C80-B4A8-0BFBF3DBBC33 AND GpsTime>='08 14 2012  3:00PM' AND GpsTime<='08 14 2012  7:30PM'
    if @@ERROR<>0
    begin
     SET @WHERES=''
    end
    --直接用quotename就行了
      

  2.   


    DECLARE @WHERES VARCHAR(1000)
    DECLARE @a datetime
    DECLARE @b datetime
    DECLARE @c varchar(100)
    set @a=N'2012-08-14 15:00:00'
    set @b=N'2012-08-14 19:30:00'
    set @c='CAA396ED-9DE2-4C80-B4A8-0BFBF3DBBC33'
    SET @WHERES='AND CompanyId='+@c+' AND GpsTime>='''+convert(varchar(19),@a,120)+''' AND GpsTime<='''+convert(varchar(19),@b,120)+''''
    print @WHERES
    if @@ERROR<>0
    begin
     SET @WHERES=''
    end
      

  3.   


    DECLARE @WHERES VARCHAR(1000)
    DECLARE @a datetime
    DECLARE @b datetime
    DECLARE @c varchar(100)
    set @a=N'2012-08-14 15:00:00'
    set @b=N'2012-08-14 19:30:00'
    set @c='CAA396ED-9DE2-4C80-B4A8-0BFBF3DBBC33'
    SET @WHERES='AND CompanyId='+@c+' AND GpsTime>='+''''+convert(varchar(30),@a,120)+''''
    +' AND GpsTime<='+''''+convert(varchar(30),@b,120)+''''
    print @WHERES
    --AND CompanyId=CAA396ED-9DE2-4C80-B4A8-0BFBF3DBBC33 AND GpsTime>='2012-08-14 15:00:00' AND GpsTime<='2012-08-14 19:30:00'if @@ERROR<>0
    begin
     SET @WHERES=''
    end--不使用quotename,那么这样拼接
      

  4.   

    DATETIME需要转换,GUID需要引号DECLARE @WHERES VARCHAR(1000)
    DECLARE @a datetime
    DECLARE @b datetime
    DECLARE @c varchar(100)
    set @a=N'2012-08-14 15:00:00'
    set @b=N'2012-08-14 19:30:00'
    set @c='CAA396ED-9DE2-4C80-B4A8-0BFBF3DBBC33'
    SET @WHERES='AND CompanyId='''+@c+''' AND GpsTime>='''+CONVERT(VARCHAR(19),@a,120)+''' AND GpsTime<='''+CONVERT(VARCHAR(19),@b,120)+''''if @@ERROR<>0
    begin
     SET @WHERES=''
    end
      

  5.   

    DECLARE @WHERES VARCHAR(1000)
    DECLARE @a datetime
    DECLARE @b datetime
    DECLARE @c varchar(100)
    set @a=N'2012-08-14 15:00:00'
    set @b=N'2012-08-14 19:30:00'
    set @c='CAA396ED-9DE2-4C80-B4A8-0BFBF3DBBC33'
    SET @WHERES='AND CompanyId='''+@c+''' AND 
    GpsTime>='''+CONVERT(VARCHAR(19),@a,120)+''' AND GpsTime<='''+CONVERT(VARCHAR(19),@b,120)+''''if @@ERROR<>0
    begin
     SET @WHERES=''
    end