虽知解决办法,就是不解为何报错,简化后的测试代码如下
if object_id('tb') is not null
drop table tb
Create Table tb(时间 datetime)
declare 
@sStartDate datetime,
@sql Nvarchar(200)
set @sStartDate='1900-01-10'Set @sql=''''+@sStartDate+''''exec(@sql)

解决方案 »

  1.   

    Set @sql=''''+@sStartDate+''''这个有什么用?
      

  2.   

    Set @sql=''''+convert(char(10),@sStartDate,120)+''''
      

  3.   


    declare 
    @sStartDate datetime,
    @sql Nvarchar(200)
    set @sStartDate='1900-01-10'Set @sql='select '''+convert(char(10),@sStartDate,120)+''''exec(@sql)/*
               
    ---------- 
    1900-01-10
    */
      

  4.   

    你查一下SQL设置的千年范围,1900年SQL不认识
      

  5.   

    注意:使用 datetime 数据类型存储从 1753 年 1 月 1 日至 9999 年 12 月 31 日的日期(每个数值要求 8 个字节的存储空间)。
    使用 smalldatetime 数据类型存储从 1900 年 1 月 1 日至 2079 年 6 月 6 日的日期(每个数值要求 4 个字节的存储空间)。
      

  6.   

    if object_id('tb') is not null
    drop table tb
    Create Table tb(时间 datetime)
    declare 
    @sStartDate datetime,
    @sql Nvarchar(200)
    set @sStartDate='1900-01-10'Set @sql=''''+convert(varchar(10),@sStartDate,120)+''''select (@sql)
      

  7.   

    declare 
    @sStartDate datetime,
    @sql Nvarchar(200)
    set @sStartDate='1900-01-10'
    Set @sql='select '''+convert(char(20),@sStartDate,120)+''''
    exec(@sql)--------------------
    1900-01-10 00:00:00 (1 行受影响)