SQL数据库里面显示在将 varchar 值 'S' 转换成数据类型 int 时失败。 下面是存储过程 麻烦看下 是否有错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL数据库里面显示在将 varchar 值 'S' 转换成数据类型 int 时失败。 下面是存储过程 麻烦看下 是否有错相关的知识,希望对你有一定的参考价值。

USE [dbHrm41All_ys]
GO
/****** Object: StoredProcedure [dbo].[Tra_Report_pEvalCourse] Script Date: 11/10/2011 11:09:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Tra_Report_pEvalCourse]
@BeginDate [varchar](32),
@EndDate [varchar](32),
@iStyle [varchar](32)
AS
CREATE TABLE #ResultTb
(
InfoID VARCHAR(32),
ClassID VARCHAR(32),
ClassCode VARCHAR(1024),
ClassName VARCHAR(1024),
CourseID VARCHAR(32),
CourseName VARCHAR(1024),
TeacherID VARCHAR(32),
TeacherName VARCHAR(1024),
TraAddress VARCHAR(1024),
OrganName VARCHAR(1024),
BeginDate DATETIME,
EndDate DATETIME,
LastAvgScore DECIMAL(18,4),
FinalImpressionID VARCHAR(32),
FinalImpressionName VARCHAR(1024),
FinalImpressionNumb INT,
)
INSERT INTO #ResultTb(InfoID,ClassID,ClassCode,ClassName,CourseID,CourseName,TeacherID,TeacherName,TraAddress,OrganName,BeginDate,EndDate,LastAvgScore,FinalImpressionID,FinalImpressionName)
SELECT A.InfoID, A.ClassID, A.ClassCode, A.ClassName, A.CourseID,A.CourseName, A.TeacherID, A.TeacherName,
A.TraAddress ,A.OrganName, A.BeginDate, A.EndDate, (CASE A.LastAvgScore WHEN '-9999.0000' THEN '0' ELSE A.LastAvgScore END), B.vID, B.vName
FROM Tra_Eval_tCourseInfo AS A
CROSS JOIN Dic_vFinalImpression AS B
WHERE A.EvalDate BETWEEN @BeginDate AND @EndDate
UPDATE #ResultTb SET FinalImpressionNumb = ISNULL((SELECT COUNT(1)
FROM Tra_Eval_tCourseStudent
WHERE InfoID = #ResultTb.InfoID
AND FinalImpressionID = #ResultTb.FinalImpressionID
),'0')
IF @iStyle = '0'
BEGIN
SELECT InfoID, ClassID, ClassCode, ClassName, CourseID, CourseName, TeacherID, TeacherName, TraAddress,
OrganName, CONVERT(VARCHAR(10),BeginDate,120) AS BeginDate, CONVERT(VARCHAR(10),EndDate,120) AS EndDate,
LastAvgScore, FinalImpressionID, FinalImpressionName, FinalImpressionNumb
FROM #ResultTb ORDER BY InfoID,FinalImpressionID
END
ELSE
BEGIN
SELECT FinalImpressionName,CourseName,FinalImpressionNumb FROM #ResultTb ORDER BY InfoID,FinalImpressionID
END

varchar 值 'S' 转换成数据类型 int 时失败是指你定义数据类型时不对或者忘记了定义数据类型。追问

还有是在哪修改呢 是程序那需要定义数据类型 还是数据库呢?

追答

先检查下数据库是否定义类型,如果没有就只有用程序定义数据类型了。

参考技术A 某个记录的数值串内有字符'S',当然无法转换成数值了,需要找到这条记录把里面不是数值的字符删掉,如果字符串内确实无法避免出现非数值型字符,则需要在程序中进行处理

在将 varchar 值 '1,2' 转换成数据类型 int 时失败。

select username from sq_user where uid in (select friends from sq_friend where username='ceshi')
怎么解决?
在线等
friend字段是varchar类型 内容是1,2

我好像又碰到 ceshi,估计我上一个回答是不是同一个人。取相互关注列表的。在我之前回的两个都写得不好。你用这个吧。
SELECT UserName
FROM dbo.sq_user AS U WITH(NOLOCK)
INNER JOIN dbo.sq_friend AS F WITH(NOLOCK)
ON U.uid = CONVERT(INT, F.friends)

WHERE F.UserName = 'ceshi'
参考技术A select username from sq_user
where (select ',' + friends + ',' from sq_friend where username='ceshi') LIKE '%,' + uid + ',%'追问

在将 varchar 值 '%,' 转换成数据类型 int 时失败。

追答

select username from sq_user
where
(select ',' + friends + ',' from sq_friend where username='ceshi') LIKE '%,' + cast (uid as varchar(20)) + ',%'

本回答被提问者和网友采纳
参考技术B 使用like 来写,ORACLE写法
select username from sq_user where (select friends from sq_friend where username='ceshi') like '%'||uid||‘%’;追问

'|' 附近有语法错误。

追答

SQL SERVER的数据库?

追问

嗯嗯

追答

select username from sq_user where (select friends from sq_friend where username='ceshi') like '%'+cast (uid as varchar(20))+‘%’;

追问

但是最后的百分号的引号是错的 输入法不对 改成英文的就好了 哈哈

以上是关于SQL数据库里面显示在将 varchar 值 'S' 转换成数据类型 int 时失败。 下面是存储过程 麻烦看下 是否有错的主要内容,如果未能解决你的问题,请参考以下文章

500 : 服务器错误DataTableSQL Error: 在将 varchar 值 'A03' 转换成数据类型 int 时失败。啥问题?

SQL用交叉报表时报错:在将 varchar 值 'then result else 0 end)' 转换成数据类型 int 时失败。

在将 varchar 值 'xiaoming' 转换成数据类型 int 时失败。

在将 varchar 值 '借阅次数' 转换成数据类型 int 时失败

在将 varchar 值 '1,2' 转换成数据类型 int 时失败。

ORACLE 数据库中在将date类型转换成varchar类型时出现问题。SQL如下: