日期:2014-05-18  浏览次数:20466 次

数据库 存储过程 从数据类型 nvarchar 转换为 smallint 时出错。
消息 8114,级别 16,状态 5,过程 add_patientinfo,第 0 行
从数据类型 nvarchar 转换为 smallint 时出错。
(1 行受影响)

存储过程如下:
USE [MyHostpitalno]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[add_patientinfo]
@mediccareid = N'12',
@inhospital = N'21',
@sickbedid = N'12',
@endscpid = 21,
@endscpcode = 2,
@instrumentid = N'12',
@patientname = N'dsfa',
@sex = N'1',
@birthday = N'1990-11-12',
@age = 21,
@phone = N'123',
@address = N'dsagfsdgasg',
@worksite = N'dsafsd',
@askhospt = 12,
@askdept = 12,
@askdr = 12,
@asktime = N'1990-11-12',
@checkdr = N'dsfa'

SELECT 'Return Value' = @return_value
GO

存储过程用到的表:
PATIENTID int Unchecked
MEDICCAREID varchar(20) Checked
INHOSPITAL varchar(20) Checked
SICKBEDID varchar(10) Checked
ENDSCPID int Unchecked
ENDSCPCODE smallint Unchecked
INSTRUMENTID tinyint Unchecked
PATIENTNAME varchar(10) Unchecked
SEX char(1) Unchecked
BIRTHDAY datetime Checked
AGE smallint Unchecked
PHONE varchar(30) Unchecked
ADDRESS varchar(40) Checked
WORKSITE varchar(40) Checked
ASKHOSPT smallint Checked
ASKDEPT smallint Checked
ASKDR smallint Checked
ASKTIME datetime Checked
CHECKDR smallint Checked
CHECKDEPT smallint Checked
CHECKTIME datetime Checked


------解决方案--------------------
太多了。

你自己把每个字段的类型看一下,然后看看被赋的值能不能转换成对应的类型。比如说含有特殊字符的字符串就不能转换成数字类型
------解决方案--------------------
给你办法
一边删除一边测试
或者


return

------解决方案--------------------
错误很明显了。

数据类型 nvarchar 转换为 smallint 时出错。

写入的地方,数据类型没匹配好。 LZ检查一下即可。
------解决方案--------------------
探讨

可是我的表中没有用到nvarchar 类型?引用:

错误很明显了。

数据类型 nvarchar 转换为 smallint 时出错。

写入的地方,数据类型没匹配好。 LZ检查一下即可。

------解决方案--------------------
@sickbedid = N'12',像这些加了N的会自动转换成NVARCHAR/NCHAR的。你的代码还是要严谨一点地检查。估计不是你自己写的。
------解决方案--------------------
晕。就一个简单的增加和修改语句。。。
这个别人还真没法给你一个一个对应的找。
楼主稍微细心点,自己好好对应的看下,给字段赋值的过程中。有没有把字符串的值赋给数字类型的字段。。
主要看那些数字类型的字段。。。