2016-06-08 91 views
0

如果创建的日期时间是空的或没有值,我想返回整个表。如果它包含日期,我想返回表格数据大于那个日期。在这里下面我提交一个代码,但它提供数据时,有一个参数,但它显示这样的错误过程SelectRotarian_AllByCreatedDatetime 程序或功能SelectRotarian_AllByCreatedDatetime预计参数@createdDateTime,这是没有提供。传递null参数时出错

(1行(S)的影响)

ALTER PROCEDURE [dbo].[SelectRotarian_AllByCreatedDatetime] 
    @createdDateTime varchar(50) 
AS 
BEGIN 

    SET NOCOUNT ON; 

    if (Coalesce(@createdDateTime,'') = '') 
    begin 
      select [id] 
     ,[surName] 
     ,[firstName] 
     ,[secondName] 
     , [address] 
     , [gender] 
     ,[picture] 
     ,[email] 
     ,[phoneNumber] 
     ,[DOB] 
     ,[vocation] 
     ,[bloodGroup_id] 
     ,[club_id] 
     ,[createdDateTime] 
    FROM [rotary_rotarian] 
    end 
    else 
    begin 

      SELECT[id] 
     ,[surName] 
     ,[firstName] 
     ,[secondName] 
     , [address] 
     , [gender] 
     ,[picture] 
     ,[email] 
     ,[phoneNumber] 
     ,[DOB] 
     ,[vocation] 
     ,[bloodGroup_id] 
     ,[club_id] 
     ,[createdDateTime] 
    FROM [rotary_rotarian] 
    where [createdDateTime] > CAST(@createdDateTime AS DateTime) 
     end 
    END 

所以请帮我

回答

1

错误消息说,:根据您当前的存储过程,你必须传递一个参数。即使你传递一个空参数或一个NULL参数,你仍然需要传递一个参数。获得错误的唯一方法是调用该过程而不传递参数。

如果你想如果没有参数传递您的存储过程来连工作,那么你必须给参数的默认值,就像这样:

ALTER PROCEDURE [dbo].[SelectRotarian_AllByCreatedDatetime] 
    @createdDateTime varchar(50) = '' 
AS 
+0

感谢ü这么多。现在它正在工作。你的巨大帮助... –

3

相反的:

ALTER PROCEDURE [dbo].[SelectRotarian_AllByCreatedDatetime] 
    @createdDateTime varchar(50) 
AS 
BEGIN 

让你的参数可为空/可选,如:

ALTER PROCEDURE [dbo].[SelectRotarian_AllByCreatedDatetime] 
    @createdDateTime DateTime = NULL 
AS 
BEGIN 

也注意,你应该在一个datetime路过为datetime,不是varchar

则:

if (Coalesce(@createdDateTime,'') = '') 

可以成为

if (@createdDatetime IS NULL)