首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

过程 * 转换成数据类型 int 时失败。解决方案

2012-04-27 
过程 *** 转换成数据类型 int 时失败。上面是存储过程,结果执行在下面。SQL codeUSE [JOauth]GO/****** Obje

过程 *** 转换成数据类型 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” 数据类型不一致导致。
[解决办法]
探讨

''' ' 改为''''

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)

[解决办法]
很明显 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
[解决办法]
爬下灵山回来就好了

热点排行