【发布时间】:2015-09-08 04:10:57
【问题描述】:
我一直在搜索和搜索,但仍然...给我一个错误。
我有这个存储过程:
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
)
当我执行存储过程时,我得到一个错误:
将数据类型 varchar 转换为 float 时出错
怎么了?存储过程中的 SQL Server 参数已经与表中的列具有相同的数据类型。有人知道吗?
【问题讨论】:
-
旁注:
char(60)是一个非常糟糕的选择 - 无论您实际存储多少个字符,它总是用空格填充到定义的长度。随着时间的推移,这是对空间的巨大浪费 - 请改用varchar(60)(对于长度超过 10 个字符的任何字符串)!
标签: sql sql-server-2008