霜水乳什么时候用最好:储存过程中不能用case语句吗?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/02 21:14:29
我写的储存过程如下:

CREATE PROC [dbo].Login(@uername VARCHAR(10),
@user_password VARCHAR(20),
@usertype int,
@userid smallint OUTPUT)
AS
SET NOCOUNT OFF
CASE @usertype
--WHEN 0 THEN
-- BEGIN SELECT @userid=admin_id FROM [dbo].[admin]
-- WHERE admin_name=@username AND admin_password=@userpassword
-- END
WHEN 1 THEN
BEGIN SELECT @userid=student_id FROM [dbo].[student]
WHERE student_name=@username AND student_password=@userpassword
END
WHEN 2 THEN
BEGIN SELECT @userid=teacher_id FROM [dbo].[teacher]
WHERE teacher_name=@username AND teacher_password=@userpassword
END
END
IF @@Rowcount < 1
SELECT
@CustomerID = 0
GO

高手请指点指点 谢谢俄
可能case不支持这种方式
用if可以

谢谢!!

首先你里面有几个变量的名字前后不符

但改过来后依然提示CASE出错。我用了很多方法,都不行

查了查SQL文档里CASE的用法,觉得可能SQL不支持你这种用法,你可以换成三个IF语句看看。

文档里的用法都是这种形式的:
USE pubs
GO
SELECT Category =
CASE type
WHEN 'popular_comp' THEN 'Popular Computing'
WHEN 'mod_cook' THEN 'Modern Cooking'
WHEN 'business' THEN 'Business'
WHEN 'psychology' THEN 'Psychology'
WHEN 'trad_cook' THEN 'Traditional Cooking'
ELSE 'Not yet categorized'
END,
CAST(title AS varchar(25)) AS 'Shortened Title',
price AS Price
FROM titles
WHERE price IS NOT NULL
ORDER BY type, price
COMPUTE AVG(price) BY type
GO

可能不支持你用了CASE判断后,在THEN语句里面再分别给别的变量赋值。

有更好的解释吗?等待...

你先看看SQLServer帮助吧,case只能用在select语句中,不能单独用。
而且case只能用于赋值操作而不能用于begin end执行操作!其实SQL中用if elseif也就足够了。