请帮助我:
此代码工作正常,除了控件进入“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
答案 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 )