在存储过程中一起选择声明的变量值

时间:2014-04-17 11:05:04

标签: sql sql-server stored-procedures

我有一个这样的存储过程:

ALTER procedure [dbo].[SaveVisitor_info]
    @VisitorName nvarchar(100) = null,
    @VistorCompanyName nvarchar(100) = null,
    @typeofid nvarchar(100) = null,
    @VisitorIDNo nvarchar(100) = null,
    @VisitPurpose nvarchar(100) = null,
    @Company nvarchar(100) = null,
    @Department nvarchar(100) = null,
    @Employee nvarchar(100) = null,
    @passno nvarchar(100) = null,
    @Accompaniedby integer = null,
    @stordloc nvarchar(100) = null,
    @nationality nvarchar(100) = null,
    @occupation nvarchar(100) = null,
    @mobileno nvarchar(100) = null
as 
begin
    declare @idtype integer,
            @visitid integer,
            @cmpid integer,
            @dptid integer,
            @empid integer,
            @currentdate datetime

    SET NOCOUNT ON

    select @currentdate = getdate()

    select @idtype = td.ID 
    from Type_ofID_tbl td 
    where td.IDName = @typeofid

    Select @visitid = v.vistid  
    from VisitPurpose_tbl v 
    where v.purpose = @VisitPurpose

    select @cmpid = c.Cid 
    from CompanyMaster_tbl c 
    where c.CompanyName=@Company

    select @dptid = d.dtId 
    from DepartmentMaster_tbl d 
    where d.dtName = @Department

    select @empid = e.eId 
    from EmployeeMaster_tbl e 
    where e.eName = @Employee

    insert into Visitorlogo_tbl(VName, VCompanyName, Idid, IdNo, VisitId, cmpid, Deptid, empid, PassNo, TotalVisitor, 
                                StordLocation, Nationality, Occupation, MobileNo, EntryTime, status)
    values(@VisitorName, @VistorCompanyName, @idtype, @VisitorIDNo, @visitid, @cmpid, @dptid, @empid, @passno, @Accompaniedby,
           @stordloc, @nationality, @occupation, @mobileno, @currentdate, 1)
end

这个存储过程工作正常,我得到了正确的输出。

我正在声明一些变量并获取每个变量值。之后我将这些值插入到我的表中。

我想知道如何更容易地编写存储过程?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这是最有效的方式或写这个。是的,你必须在五个不同的桌子上写下五个单身选择,那又怎样呢? - 你可能可以写一个选择加入那些fove表,但是在性能方面你不会获得任何东西,恰恰相反。

如果存在性能问题,请在where子句中使用的列上创建索引(如果它们已丢失),并在必要时包含选择列表中的列。但我不认为你会这样做。