首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

生手求教一个存储过程

2013-07-01 
新手求教一个存储过程新手求教各位高手一个存储过程:一个工资表,三个字段:ID,Name,Price;现在要给所有人加

新手求教一个存储过程
新手求教各位高手一个存储过程:
    一个工资表,三个字段:ID,Name,Price;现在要给所有人加工资,每次加100元,加到大于等于6000就不加了;同时如果半数以上的人的工资都加到6000或以上,那么所有的人都不在增加工资。
求高手给予帮助,谢谢!
[解决办法]
CREATE TABLE Table_A
(
IDVARCHAR(20),
[NAME]VARCHAR(20),
PriceNUMERIC(18,2)
)
INSERT INTO Table_A(ID,[NAME],Price)
SELECT '0001','张三',4000
union all
SELECT '0002','李四',5900
union all
SELECT '0003','王二',6000
union all
SELECT '0004','麻子',6500
union all
SELECT '0005','温某',4800



CREATE PROC PROC_A
AS
BEGIN
declare @mCountint

SELECT @mCount = COUNT(1) FROM Table_A
 WHERE Price >= 6000

IF @mCount > CONVERT(numeric(18,1),(CONVERT(numeric(18,1),(SELECT COUNT(1) FROM Table_A))/2.0))
BEGIN
Return -2/*提示'半数以上的人的工资都加到6000或以上'*/
END

UPDATE Table_A
   SET  Price = IsNull(Price,0.00) + 100
 WHERE Price < 6000
END

/*执行存储过程*/
EXEC PROC_A

ID                   NAME                 Price
-------------------- -------------------- ---------------------------------------
0001                 张三                   4100.00
0002                 李四                   6000.00
0003                 王二                   6000.00
0004                 麻子                   6500.00


0005                 温某                   4900.00

(5 行受影响)

[解决办法]

引用:

alter proc proc_a
as
begin
if(select COUNT(1) from a where price>=6000)<(select COUNT(1)/2 from a)
update a set price=price+100 where price<6000
end


引用:
CREATE TABLE Table_A
(
IDVARCHAR(20),
[NAME]VARCHAR(20),
PriceNUMERIC(18,2)
)
INSERT INTO Table_A(ID,[NAME],Price)
SELECT '0001','张三',4000
union all
SELECT '0002','李四',5900
union all
SELECT '0003','王二',6000
union all
SELECT '0004','麻子',6500
union all
SELECT '0005','温某',4800



CREATE PROC PROC_A
AS
BEGIN
declare @mCountint

SELECT @mCount = COUNT(1) FROM Table_A
 WHERE Price >= 6000

IF @mCount > CONVERT(numeric(18,1),(CONVERT(numeric(18,1),(SELECT COUNT(1) FROM Table_A))/2.0))
BEGIN
Return -2/*提示'半数以上的人的工资都加到6000或以上'*/
END

UPDATE Table_A
   SET  Price = IsNull(Price,0.00) + 100
 WHERE Price < 6000
END

/*执行存储过程*/
EXEC PROC_A

ID                   NAME                 Price
-------------------- -------------------- ---------------------------------------
0001                 张三                   4100.00
0002                 李四                   6000.00
0003                 王二                   6000.00
0004                 麻子                   6500.00


0005                 温某                   4900.00

(5 行受影响)



@mCount > CONVERT(numeric(18,1),(CONVERT(numeric(18,1),(SELECT COUNT(1) FROM Table_A))/2.0))这句写反了。
应该是下面这样
@mCount < CONVERT(numeric(18,1),(CONVERT(numeric(18,1),(SELECT COUNT(1) FROM Table_A))/2.0))

热点排行