RT,以下为例:可否这样写呢?CREATE PROCEDURE sf_发工资 @员工号 char,@工资类别号 char,@日期 smalldatetime
AS
begin tran
insert into 缴纳保障费用(员工编号,保障类别编号,缴纳日期,缴纳额)
select @员工号, 保障类别编号,@日期,征收率*(select  基本工资 from 工资 where 工资.工资类别编号=@工资类别号) 
from 社会保障
where 保障类别编号='1'
commit
GO

解决方案 »

  1.   

    这个好像是sql server的语法.
    在sql server中,这样做可以是可以,
    但是有  可能  会影响效率.select @员工号, 保障类别编号,@日期,征收率*(select  基本工资 from 工资 where 工资.工资类别编号=@工资类别号)
    from 社会保障如果"select  from 社会保障"有n条,"select from  工资" 有m条, ( n>>1)
    那么查询的次数就是n*m
    而实际上,m次是多余的,因为每次查询的结果都是一样的,就多做了很多次的查询.
    因此,一中比较好的做法是,如果能确定m=1,就先得到子查询的值放在变量中;如果m>1,就用一个临时表来放着当n,m很大的时候,这个效率的损失,还是很可观的