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

过程 *** 转换成数据类型 int 时失败。
上面是存储过程,结果执行在下面。
SQL code

USE [JOauth]
GO
/****** Object:  StoredProcedure [dbo].[Query_SapplicationInfoList]    Script Date: 04/26/2012 12:32:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

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 += 
                ' 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' ' 这里多出了一个 ‘ 符号。 
是个什么原因,脑袋短路,提醒一下。