Skip Navigation Links Skip Navigation Links.
Skip Navigation Links Skip Navigation Links.


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.