当前位置: 代码迷 >> Sql Server >> 过程 * 转换成数据类型 int 时失败。解决方案
  详细解决方案

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

热度:543   发布时间:2016-04-27 13:09:27.0
过程 *** 转换成数据类型 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 值 '”对称。

[email protected] 是否可以隐式转化成int类型。

明显“ea7ec247-59d2--- 4aa4-ac72-11c601”不是int类型。
[email protected],应该是“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' ' 这里多出了一个 ‘ 符号。 
是个什么原因,脑袋短路,提醒一下。
  相关解决方案