2015-09-08 92 views
0

我搜索和搜索,但仍然...给了我一个错误。将数据类型varchar转换为浮动SQL Server存储过程出错

我有这个存储过程:

CREATE procedure _spItemList 
(
    @branch nchar(12) 
    , @ItemNo float 
    , @ItemDescription char(60) 
) 
as 
begin 
     SET NOCOUNT ON; 

     select   
      Branch 
      , CONVERT(varchar(100), ItemNo) ItemNo 
      , Description1 
      , Description2 
      , FullDescription 
     from 
      _ItemList 
     where   
      (Branch LIKE '%' + @branch + '%' or ISNULL(@branch, '') = '') 
      and (ItemNo LIKE '%' + @ItemNo + '%' or ISNULL(@ItemNo, '') = '') 
      and (FullDescription LIKE '%' + @ItemDescription + '%' or ISNULL(@ItemDescription, '') = '') 
    end 

我有以下表结构:

CREATE TABLE _ItemList 
(
    [ItemNo] [float] NULL, 
    [Description1] [char](30) NULL, 
    [Description2] [char](30) NULL, 
    [FullDescription] [char](60) NULL 
) 

当我执行存储过程,我得到一个错误:

Error converting data type varchar to float

怎么了?存储过程中的SQL Server参数与表中的列具有相同的数据类型。有人知道吗?

+2

旁注:'CHAR(60)'是一个非常糟糕的选择 - 无论您确实存储了多少个字符,它总是以**空格填充到定义的长度。随着时间的推移,这会造成巨大的空间浪费 - 请使用'varchar(60)'(对于长度超过10个字符的任何字符串)! –

回答

1

尝试这句话太转换,因为你是串联 '%'(字符串)与@ItemNo(浮点值),检查出来:

(ItemNo LIKE '%' + CONVERT(VARCHAR(100),@ItemNo) + '%' or ISNULL(@ItemNo, '') = '') 
+0

哦,我的天啊!欢呼的队友,, #needtosleep – Haminteu

+0

它发生兄弟,哈丁codding,但明天:)。 –

相关问题