远程主机强制关闭现有连接

时间:2010-07-21 13:05:32

标签: asp.net sql-server sql-server-2000

请帮助我:

此代码工作正常,除了控件进入“NOT EXSISTS”的IF块内,然后执行此块后运行的任何查询都会导致sql连接被强制关闭,尽管运行结果这段代码块是正确的。运行后我无法运行其他查询。

IF(@Mode='Get')
BEGIN
    IF(@Field='manager')
    BEGIN
        DECLARE @UserUserName NVARCHAR(250)
        DECLARE @UserID AS VARCHAR(50)
        SELECT @UserUserName=CAST(Value AS NVARCHAR(250)) FROM dbo.UserProperties WHERE [Key]=@Key AND Field='manager'
        IF(NOT EXISTS(SELECT * FROM dbo.Users WHERE UserUsername=@UserUserName) OR @UserUserName IS NULL )
        BEGIN
            SELECT  @UserID = dbo.fnGetManagerId(CAST(@Key AS INT)) -- numeric
            SELECT @UserUserName=UserUsername FROM dbo.Users WHERE UserID=@UserID
        END 
        SELECT UserName AS Value FROM users WHERE UserUsername=@UserUserName
    END 
    ELSE
    BEGIN
        SELECT Value FROM dbo.UserProperties WHERE [Key]=@Key AND Field=@Field
    END 
END

2 个答案:

答案 0 :(得分:2)

我似乎记得在SQL2000中看到有关使用标量UDF的bug的kb文章可能会导致访问冲突,但是你可能会遇到其中一个?我首先将转换从UDF参数列表中分离出来并在另一行中进行

替换

SELECT  @UserID = dbo.fnGetManagerId(CAST(@Key AS INT)) -- numeric

使用

DECLARE @K int
SET @K = CAST(@Key AS INT)
SELECT  @UserID = dbo.fnGetManagerId(@K)

然后如果问题仍然存在,请一次注释掉一行直到找到罪魁祸首。

我会查看SQL Server错误日志。您还可以使用SQL事件探查器跟踪用户错误消息。足够高的严重性错误会自动关闭连接。

答案 1 :(得分:1)

我认为您的IF声明不正确。尝试:

IF NOT (EXISTS(SELECT * FROM dbo.Users WHERE UserUsername=@UserUserName) OR @UserUserName IS NULL )