日期:2014-05-17  浏览次数:20447 次

string类型自己变成int类型来比较了,求指教
我用textbox文本框,输入11位数字(超过int的范围了)
前台代码一路接收下来都是用的string类型
然后测试存储过程发现:
ALTER PROCEDURE [sp_SelFindCardcount] 
@CardID nvarchar(50)
AS
set nocount on
if(@CardID='' )--查询全部
begin
 select count(*)as pagecount from Card
end
if(@CardID<>'' )--根据密保卡号
begin
exec('select count(*)as pagecount from Card where CardID = '+@CardID)
end
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
数据库一共2条记录54884485864 和 46426486131
execute sp_SelFindCardcount 54884485864 --发现一条记录(54884485864)是数据库有的值
execute sp_SelFindCardcount 54884485865 --发现0条记录(54884485865)是数据库没有的值
execute sp_SelFindCardcount 5488448586 --将 numeric 转换为数据类型 numeric 时发生算术溢出错误。
execute sp_SelFindCardcount 548844858 --nvarchar 值 '46426486131' 的转换溢出了 int 列。超出了最大整数值。
execute sp_SelFindCardcount 46426486131 ----发现一条记录(46426486131)是数据库有的值
execute sp_SelFindCardcount 4642648613 --将 numeric 转换为数据类型 numeric 时发生算术溢出错误。
execute sp_SelFindCardcount 464264861 --nvarchar 值 '46426486131' 的转换溢出了 int 列。超出了最大整数值。

怎么解决?

------解决方案--------------------
试试这样行不行?
SQL code

ALTER PROCEDURE [sp_SelFindCardcount] 
@CardID NVARCHAR(50)
AS 
    SET nocount ON
    IF ( @CardID = '' )--查询全部
        BEGIN
            SELECT  COUNT(*) AS pagecount FROM Card
        END
    IF ( @CardID <> '' )--根据密保卡号
        BEGIN
            EXEC('select count(*) as pagecount from Card where ltrim(CardID) = '''+@CardID+'''')
        END

------解决方案--------------------
SQL code

--原语句改为
exec('select count(*)as pagecount from Card where CardID = '+ '''' + @CardID + '''')

------解决方案--------------------
SQL code
在使用 sql 拼接的时候
对于整型 :exec('select count(*)as pagecount from Card where CardID = '+@CardID)
对于字符类型:exec('select count(*)as pagecount from Card where CardID = '+ '''' + @CardID + '''')