try:
IF EXISTS( SELECT * FROM sysobjects WHERE name='attendances_select_countByState_proc' )
DROP PROCEDURE attendances_select_countByState_proc
GO
CREATE PROCEDURE attendances_select_countByState_proc
@eid nvarchar(20),
@start datetime,
@end datetime
AS
DECLARE @sql nvarchar(1000)
SET @sql='SELECT * FROM attend WHERE startdate>='''+convert(varchar(10),@start,23)+''' AND enddate<='''+convert(varchar(10),@end,23)+''''
IF(@eid IS NOT NULL)
BEGIN
IF(LEN(@eid)>0)
BEGIN
SET @sql=@sql+' AND eid='''+@eid+''
END
END
EXEC(@sql)
GO 

解决方案 »

  1.   

    IF EXISTS( SELECT * FROM sysobjects WHERE name='attendances_select_countByState_proc' )
    DROP PROCEDURE attendances_select_countByState_proc
    GO
    [code=SQL]CREATE PROCEDURE attendances_select_countByState_proc
    @eid nvarchar(20),
    @start datetime,
    @end datetime
    AS
    DECLARE @sql nvarchar(1000)
    SET @sql='SELECT * FROM attend WHERE startdate>='''+convert(varchar(10),@start,23)+''' AND enddate<='''+convert(varchar(10),@end,23)+''''
    IF(@eid IS NOT NULL)
    BEGIN
    IF(LEN(@eid)>0)
    BEGIN
    SET @sql=@sql+' AND eid='''+@eid+'''' --这里改下
    END
    END
    EXEC(@sql)
    GO [/code]
      

  2.   

    恩,现在没问题了,但是我不知道这是为什么会这样,这里为什么要转换convert(varchar(10),@start,23),我数据库是datetime类型啊,这里convert(varchar(10),@end,23)+''''为什么要4个单引号?