新手求教各位高手一个存储过程:
    一个工资表,三个字段:ID,Name,Price;现在要给所有人加工资,每次加100元,加到大于等于6000就不加了;同时如果半数以上的人的工资都加到6000或以上,那么所有的人都不在增加工资。
求高手给予帮助,谢谢!

解决方案 »

  1.   

    create proc test
    as
    set nocount on
    update tb set price=price+100
    where price<6000go
      

  2.   


    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
      

  3.   

    CREATE TABLE Table_A
    (
    ID VARCHAR(20),
    [NAME] VARCHAR(20),
    Price NUMERIC(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','温某',4800CREATE PROC PROC_A
    AS
    BEGIN
    declare @mCount int

    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_AID                   NAME                 Price
    -------------------- -------------------- ---------------------------------------
    0001                 张三                   4100.00
    0002                 李四                   6000.00
    0003                 王二                   6000.00
    0004                 麻子                   6500.00
    0005                 温某                   4900.00(5 行受影响)
      

  4.   

    @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))