从表选择中分配存储过程输出值的更好方法



由于编程语言的限制,我的ERP系统不允许我进行高级选择查询,这就是为什么我需要依赖于在SQL Server上创建一个存储过程,从ERP系统调用它并通过数组获得结果。

下面的代码工作正常,但我认为这不是正确的方式来分配值的输出变量…我想直接从select中分配输出变量,而不需要创建一个#temp表…这可能吗?还是我做对了?

如果代码可以增强,我会优雅地接受任何建议。该代码的目的是调用带有RFID标签(由RFID读卡器读取)的存储过程,然后从另一个数据库、另一个ERP、另一个服务器(通过SQL"链接服务器"链接)获取一些员工信息

ALTER procedure [dbo].[KSBValTag] 
(
@rfid varchar(20),
@OUT_NUMCAD varchar(10) OUTPUT,
@OUT_NOMFUN varchar(50) OUTPUT,
@OUT_SIT varchar(2) OUTPUT,
@OUT_CODCCU varchar(5) OUTPUT,
@OUT_NOMCCU varchar(30) OUTPUT 
) as
Begin
    set @rfid = SUBSTRING(@rfid, PATINDEX('%[^0]%', @rfid+'.'), LEN(@rfid))
    select fun.numcad as Numcad,
    fun.nomfun as Nomefun,
    fun.sitafa as Situacao,
    fun.codccu as CodCCU,
    ccu.nomccu as NomeCCU
    into #temp
    from [vetorh].vetorh.r034fun as FUN
    inner join
    [vetorh].vetorh.r018ccu CCU
    on fun.codccu = ccu.codccu
    where numcad = (select num_cartao from [ksb-app01].topacesso.dbo.Cartoes where CodigoDeBarras = @rfid)
    and tipcol = '1'
    set @OUT_NUMCAD = (select Numcad from #temp)
    set @OUT_NOMFUN = (select Nomefun from #temp)
    set @OUT_SIT = (select Situacao from #temp)
    set @OUT_CODCCU = (select CodCCU from #temp)
    set @OUT_NOMCCU = (select NomeCCU from #temp)
End
select 
@OUT_NUMCAD = fun.numcad,
@OUT_NOMFUN = fun.nomfun,
@OUT_SIT = fun.sitafa,
@OUT_CODCCU = fun.codccu,
@OUT_NOMCCU = ccu.nomccu
from [vetorh].vetorh.r034fun as FUN
inner join
[vetorh].vetorh.r018ccu CCU
on fun.codccu = ccu.codccu
where numcad = (select num_cartao from [ksb-app01].topacesso.dbo.Cartoes where CodigoDeBarras = @rfid)
and tipcol = '1'

最新更新