47415 - Console - Software - přidělit licenci - zobrazí se chyba "COM:
subquery returned more than 1 value"
Článek se týká verzí produktů
ALVAO Asset Management 8.0, 8.0 SP1, 8.0 SP2
Příznaky
- Přiděluje se licence, která byla upgradována z jiné
(původní) licence, přičemž původní licence byla upgradována
postupně několikrát.
Př.:
- Zakoupená licence Windows XP
Professional, 10ks
- 5ks bylo upgradováno na Windows 7
Professional
- zbývajících 5ks bylo upgradováno na
Windows 8 Professional
- Při přidělení licence Windows 8 Professional se zobrazí chyba:
Subquery returned more than 1 value. This is
not permitted when the subquery follows =, !=,
<, <= , >, >= or when the subquery is used as an
expression.
Příčina
Příčinou je chyba v produktech ALVAO.
Řešení
Opraveno ve verzi 8.1.700.
Náhradní řešení
Řešení 1:
Pokud chcete přidělit licenci, která vykazuje výše
popsané chování, jděte do evidence licencí, upravte
požadovanou licenci a v položkách licence přidělte položku
na požadovaný počítač.
Řešení 2:
Na databázi spusťte skript:
alter procedure dbo.spAssignLicenceItemToChildren @LicHistItemId int as
begin
set nocount on
if( isnull(@LicHistItemId,0)=0 )
return
/* modelove hodnoty */
declare @cc nvarchar(255), @comp int, @ak nvarchar(255)
select @cc=txtDepartment,@comp=NodeId, @ak=ActivationKey
from tblLicHistItem
where intLicHistItemId=@LicHistItemId
/* aktualizacni tabulka */
declare @t table
(
id int, /* ID licence */
itm int, /* ID plozky */
itmUpgFrom int, /* ID polozky na kterou se upgradovalo (jde se pozpatku) */
itmCancById int /* ID cencel licID */
)
insert into @t (id, itm)
select lintLicHistId,intLicHistItemId
from tblLicHistItem
where intLicHistItemId=@LicHistItemId
declare @itm int, @id int, @upg int, @canc int, @previd int
select @id=id from @t
while ( @id is not null )
begin
set @previd = @id
select
@id=lintCancelLicHistId,
@itm=intLicHistItemId,
@canc=intLicHistId
from (
select
pl.lintCancelLicHistId,
pit.intLicHistItemId,
pl.intLicHistId,
row_number() over (partition by pl.lintCancelLicHistId order by pit.intLicHistItemId) rn
from tblLicHistRel rel
join tblLicHist pl on pl.intLicHistId=rel.lintLicHistId1 and pl.lintCancelLicHistId is not null
left join tblLicHistItem pit on pit.lintLicHistId=pl.lintCancelLicHistId and isnull(pit.txtDepartment,'')=isnull(@cc,'') and pit.NodeId is null
where rel.lintLicHistId2=@id
) t
where t.rn=1
/* zadna dalsi licence */
if( @@rowcount = 0 )
break
/* kontrola zacykleni */
if( exists(select 1 from @t where id=@id) )
break
/* polozka neexistuje, zkus vytvorit, pokud neni vycerpan pocet */
if( @itm is null )
begin
if ( (select
-lhc.intCountChange-isnull(lhic.cnt,0) freeLic
from tblLicHist lhc
left join (
select
lintLicHistId,
count(*) cnt
from tblLicHistItem lhi
group by lintLicHistId
) lhic on lhic.lintLicHistId=lhc.intLicHistId
where lhc.intLicHistId=@canc)>0 )
begin
insert into tblLicHistItem (lintLicHistId,NodeId,txtDepartment,lintCancelledByLicHistId,ActivationKey)
values (@id,@comp,case when isnull(@cc,'')='' then null else @cc end,@canc,case when isnull(@ak,'')='' then null else @ak end)
set @itm = scope_identity()
end
end
/* predchozi item upgradovan z */
update @t set itmUpgFrom=@itm where id=@previd
/* vlozit zaznam o dalsim itm */
insert into @t (id,itm,itmCancById) values (@id,@itm,@canc)
end
/* aktualizuj evidenci */
update lhi
set lhi.lintCancelledByLicHistId=t.itmCancById,
lhi.UpgradedFromLicHistItemId=t.itmUpgFrom
from tblLicHistItem lhi
join @t t on t.itm=lhi.intLicHistItemId
end;
Nenašli jste co jste hledali? Zeptejte se našeho týmu technické podpory.
|