USE ud GO sp_configure 'clr_enabled', 1 GO RECONFIGURE GO IF OBJECT_ID('Wavg') IS NOT NULL DROP AGGREGATE Wavg GO IF OBJECT_ID('CreateWeightedValue') IS NOT NULL DROP FUNCTION CreateWeightedValue GO IF (SELECT COUNT(*) FROM sys.types WHERE UPPER(name) = 'WEIGHTEDVALUE') > 0 DROP TYPE WeightedValue GO IF (SELECT COUNT(*) FROM sys.assemblies WHERE UPPER(name) = 'UD') > 0 DROP ASSEMBLY ud GO CREATE ASSEMBLY ud FROM 'c:\\gordon\blog\blog1.dll' WITH PERMISSION_SET = SAFE; GO CREATE TYPE WeightedValue EXTERNAL NAME ud.WeightedValue; GO CREATE FUNCTION CreateWeightedValue (@val float, @wgt float) RETURNS WeightedValue as EXTERNAL NAME ud.UserDefinedFunctions.CreateWeightedValue GO CREATE AGGREGATE WAvg (@val WeightedValue) RETURNS float EXTERNAL NAME ud.WAvg GO select val.ToString(), val.Value, val.Weight from (select ud.dbo.CreateWeightedValue(3, 5) as val) a