过程 *** 转换成数据类型 int 时失败。
上面是存储过程,结果执行在下面。
- SQL code
USE [JOauth]GO/****** Object: StoredProcedure [dbo].[Query_SapplicationInfoList] Script Date: 04/26/2012 12:32:28 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[Query_SapplicationInfoList]( @startpage INT, --起始行 @endpage INT, --结束行 @uid CHAR(36) --用户ID)AS DECLARE @strsql VARCHAR(4000) BEGIN SET @strsql = ' SELECT TOP (' + CAST(@endpage AS VARCHAR) + ' - ' + CAST(@startpage AS VARCHAR) + ' + 1)[SAID], [SASid], [SASName], [SACDate], [SAPic], [SACD], [SASType], [SASWebsite], [SALoginwebsite], [SAAudit], [SAvisible], [SAifdelete], [SAServerSecrect], [SAifSysAudit], ui.UserName, ti.Tname FROM SapplicationInfo si, TypeInfo ti, UserInfo ui WHERE si.SASType = ti.TID AND si.SASid = ui.[UID] AND si.SAifdelete = 1 ' IF @uid <> '' BEGIN SET @strsql += ' AND SI.SAifSysAudit = 0 AND si.SAvisible = 1 AND ui.UID=''' + CAST(@uid AS CHAR) + ''' ' END SET @strsql += ' AND si.SAID NOT IN (SELECT TOP(' + CAST(@startpage AS INT) + ' -1) si.[SAID] FROM SapplicationInfo si, TypeInfo ti, UserInfo ui WHERE si.SASType = ti.TID AND ui.UID = si.SASid AND si.SAifdelete = 1 ' IF @uid <> '' BEGIN SET @strsql += ' AND SI.SAifSysAudit = 0 AND si.SAvisible = 1 AND ui.[UID]=''' + CAST(@uid AS CHAR) + ''' ' END SET @strsql += ' ORDER BY SACDate DESC) ORDER BY SACDate DESC ' END PRINT @strsql- SQL code
--消息 245,级别 16,状态 1,过程 Query_SapplicationInfoList,第 29 行--在将 varchar 值 ' SELECT TOP (2 - 1 + 1)[SAID], [SASid], [SASName], [SACDate], -- [SAPic], [SACD], [SASType], [SASWebsite], [SALoginwebsite], [SAAudit], -- [SAvisible], [SAifdelete], [SAServerSecrect], [SAifSysAudit], ui.UserName, -- ti.Tname -- FROM SapplicationInfo si, TypeInfo ti, UserInfo ui-- WHERE si.SASType = ti.TID-- AND si.SASid = ui.[UID] -- AND si.SAifdelete = 1 AND SI.SAifSysAudit = 0 AND si.SAvisible = 1 AND ui.UID='ea7ec247-59d2--- 4aa4-ac72-11c601' ' 转换成数据类型 int 时失败。
很明显 ui.UID='ea7ec247-59d2--- 4aa4-ac72-11c601' ' 这里多出了一个 ‘ 符号。
是个什么原因,脑袋短路,提醒一下。
[解决办法]
''' ' 改为''''
SET @strsql += ' AND si.SAID NOT IN (SELECT TOP(' + CAST(@startpage AS INT)
改为
SET @strsql += ' AND si.SAID NOT IN (SELECT TOP(' + CAST(@startpage AS VARCHAR)
[解决办法]
这里多出了一个 ‘ 符号。
这是消息提示,与前面的“在将 varchar 值 '”对称。
检查下传入的@uid 是否可以隐式转化成int类型。
明显“ea7ec247-59d2--- 4aa4-ac72-11c601”不是int类型。
如果传入的@uid没错,应该是“ui.UID = si.SASid” 数据类型不一致导致。
[解决办法]
[解决办法]
很明显 ui.UID='ea7ec247-59d2--- 4aa4-ac72-11c601' ' 这里多出了一个 ‘ 符号。
是个什么原因,脑袋短路,提醒一下。
--------------------------------------
多了个引号是,sql提示错误的时候它把值用单引号括起来了。所以看上去多了个引号一样的。
[解决办法]
不能转换.
[解决办法]
- SQL code
ALTER PROCEDURE [dbo].[Query_SapplicationInfoList]( @startpage INT, --起始行 @endpage INT, --结束行 @uid CHAR(36) --用户ID)AS DECLARE @strsql VARCHAR(4000) BEGIN SET @strsql = ' SELECT TOP (' + CAST(@endpage AS VARCHAR) + ' - ' + CAST(@startpage AS VARCHAR) + ' + 1)[SAID], [SASid], [SASName], [SACDate], [SAPic], [SACD], [SASType], [SASWebsite], [SALoginwebsite], [SAAudit], [SAvisible], [SAifdelete], [SAServerSecrect], [SAifSysAudit], ui.UserName, ti.Tname FROM SapplicationInfo si, TypeInfo ti, UserInfo ui WHERE si.SASType = ti.TID AND si.SASid = ui.[UID] AND si.SAifdelete = 1 ' IF @uid <> '' BEGIN SET @strsql = @strsql+ ' AND SI.SAifSysAudit = 0 AND si.SAvisible = 1 AND ui.UID=''' + CAST(@uid AS CHAR) + '''' END SET @strsql = @strsql+ ' AND si.SAID NOT IN (SELECT TOP(' + CAST(@startpage AS VARCHAR) + ' -1) si.[SAID] FROM SapplicationInfo si, TypeInfo ti, UserInfo ui WHERE si.SASType = ti.TID AND ui.UID = si.SASid AND si.SAifdelete = 1 ' IF @uid <> '' BEGIN SET @strsql=@strsql+ ' AND SI.SAifSysAudit = 0 AND si.SAvisible = 1 AND ui.[UID]=''' + CAST(@uid AS CHAR) + '''' END SET @strsql =@strsql+ ' ORDER BY SACDate DESC) ORDER BY SACDate DESC ' END PRINT @strsql
[解决办法]
爬下灵山回来就好了