if exists(select * from sysobjects where [id] = object_id(N'[dbo].[pro_product]')
and [xtype] in (N'P'))
drop procedure [dbo].[pro_product]
go
create procedure [dbo].[pro_product]
(@product_class varchar(50) =N''--分类ID
)
as
declare @sql varchar(256)
if(@product_class = N'')
begin
set @sql = 'select * from [dbo].[productview]'
end
else
begin
set @sql = 'select * from [dbo].[productview] where [dbo].[productview].[类别] = '+@product_class
end
exec(@sql)
go
将数据类型 varchar 转换为 float 时出错。

解决方案 »

  1.   

    set @sql = 'select * from [dbo].[productview] where [dbo].[productview].[类别] = '''+@product_class+''''
      

  2.   

    if exists(select * from sysobjects where [id] = object_id(N'[dbo].[pro_product]')
    and [xtype] in (N'P'))
    drop procedure [dbo].[pro_product]
    go
    create procedure [dbo].[pro_product]
    (@product_class varchar(50) =N''--分类ID
    )
    as
    declare @sql varchar(256)
    if(@product_class = N'')
    begin
    set @sql = 'select * from [dbo].[productview]'
    end
    else
    begin
    set @sql = 'select * from [dbo].[productview] where [dbo].[productview].[类别] = '+str(@product_class)
    end
    exec(@sql)
    go
    将数据类型 varchar 转换为 float 时出错。
      

  3.   

    [dbo].[productview].[类别]是什么类型?
      

  4.   


    if exists(select * from sysobjects where [id] = object_id(N'[dbo].[pro_product]') 
    and [xtype] in (N'P')) 
    drop procedure [dbo].[pro_product] 
    go 
    create procedure [dbo].[pro_product] 
    (@product_class varchar(50) =N''--分类ID 

    as 
    declare @sql varchar(256) 
    if(@product_class = N'') 
    begin 
    set @sql = 'select * from [dbo].[productview]' 
    end 
    else 
    begin 
    set @sql = 'select * from [dbo].[productview] where [dbo].[productview].[类别] = '+ltrim(@product_class) --转换为字符串
    end 
    exec(@sql) 
    go 
      

  5.   

    if exists(select * from sysobjects where [id] = object_id(N'[dbo].[pro_product]') 
    and [xtype] in (N'P')) 
    drop procedure [dbo].[pro_product] 
    go 
    create procedure [dbo].[pro_product] 
    (@product_class varchar(50) =N''--分类ID 

    as 
    declare @sql varchar(256) 
    if(@product_class = N'') 
    begin 
    set @sql = 'select * from [dbo].[productview]' 
    end 
    else 
    begin 
    set @sql = 'select * from [dbo].[productview] 
    where [dbo].[productview].[类别] = '''+@product_class+'''' --转换为字符串
    end 
    exec(@sql) 
    go 
      

  6.   

    那个注释就无视掉吧,相信这样就对了,select语句里面的where条件 =后面的字符要用引号引起来。。