【问题标题】:Getting Error "Conversion failed when converting the nvarchar value 'egt1egt' to data type int. "出现错误“将 nvarchar 值 'egt1egt' 转换为数据类型 int 时转换失败。”
【发布时间】:2012-10-18 12:46:58
【问题描述】:

我创建了一个 sql 过程来返回与用户名关联的密码。

SQL 过程:

USE [C:\INETPUB\WWWROOT\ADDMARKER\MAP\MAP\APP_DATA\ASPNETDB.MDF]
GO
/****** Object:  StoredProcedure [dbo].[aspnet_Membership_EmailPassword]    Script Date: 10/18/2012 15:32:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[aspnet_Membership_EmailPassword] 
    -- Add the parameters for the stored procedure here
            (
            @UserName  nvarchar(256),
            @PasswordReturn nvarchar(128) out
            )
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
     DECLARE @UserId                                 uniqueidentifier
     DECLARE @Password                               nvarchar(128)
     DECLARE @Return_Password                         nvarchar(256)
     DECLARE @IsLockedOut                            bit
     DECLARE @ErrorCode     int
     SET @ErrorCode = 0

     DECLARE @TranStarted   bit
     SET @TranStarted = 0
      SET NOCOUNT ON;

IF( @@TRANCOUNT = 0 )
    BEGIN
        BEGIN TRANSACTION
        SET @TranStarted = 1
    END
    ELSE
        SET @TranStarted = 0

    SELECT  @UserId = u.UserId,
            @Password = m.Password,
            @IsLockedOut = m.IsLockedOut

    FROM    dbo.aspnet_Users u, dbo.aspnet_Membership m WITH ( UPDLOCK )
    WHERE    u.UserId = m.UserId AND
            LOWER(@UserName) = u.LoweredUserName

     IF ( @@rowcount = 0 )
    BEGIN
        SET @ErrorCode = 1
    END

    IF( @IsLockedOut = 1 )
    BEGIN
        SET @ErrorCode = 99
    END
    IF(Not( @ErrorCode = 0) )
    set @PasswordReturn = 'Error in search'
       ELSE
       set @PasswordReturn = @Password
       RETURN @PasswordReturn
END

我遇到错误

“消息 245,级别 16,状态 1,过程 aspnet_Membership_EmailPassword,第 59 行 将 nvarchar 值 'egt1egt' 转换为数据类型 int 时转换失败。"

在执行该程序时。

请问有人可以帮忙吗?

谢谢

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    Return只能返回一个int,它是过程的返回值。

    退出过程会自动返回输出参数,所以去掉该行

     RETURN @PasswordReturn 
    

    输出参数与返回值的区别详见http://msdn.microsoft.com/en-us/library/59x02y99(v=vs.71).aspx

    【讨论】:

    • 谢谢!!那么我怎样才能传递我从这个程序中得到的密码呢?我想要 ASP.net 程序中的密码。抱歉,我是 SQL Server 编程新手
    • 它将在@PasswordReturn参数中。
    • 我现在又收到一个错误:“消息 266,级别 16,状态 2,过程 aspnet_Membership_EmailPassword,第 0 行 EXECUTE 后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 0,当前计数 = 1。”除了返回语句之外,代码是相同的。可能有什么问题?
    • 您在开始时已启动事务但未调用commitrollback
    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 2011-08-29
    • 2015-06-20
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多