Re: Representation for Heterogeneous Attribute Set
Date: 11 Feb 2005 14:09:18 -0800
Message-ID: <1108159758.672833.140460_at_f14g2000cwb.googlegroups.com>
Here's some sample MSSQL code for the Variant approach.
CREATE TABLE bonds (bond_id INTEGER, bond_type INTEGER, attribute_id
INTEGER, data_type BIT, value SQL_VARIANT)
GO
CREATE TRIGGER bonds_value_validate
ON dbo.bonds
FOR INSERT, UPDATE
AS
BEGIN
  IF EXISTS(
  SELECT *
  FROM INSERTed
  WHERE SQL_VARIANT_PROPERTY(value,'BaseType') <>
    CASE data_type WHEN null then 'datetime' WHEN 0 THEN 'varchar' WHEN
1 THEN 'int' END
  ) BEGIN
  ROLLBACK
  RAISERROR ('Bad Value', 16, 10)
  END
END
GO
INSERT bonds VALUES (1,1,1,null,cast('20050101' as datetime))
GO
INSERT bonds VALUES (1,1,2,0,'abcdef')
GO
INSERT bonds VALUES (1,1,3,1,12345678)
GO
-- this one will throw an error
INSERT bonds VALUES (1,1,3,0,12345678)
GO
SELECT data_type,cast(value as
char(11)),cast(SQL_VARIANT_PROPERTY(value,'BaseType') as char(10)) FROM
bonds
/* output:
NULL Jan 1 2005 datetime 0 abcdef varchar 1 12345678 int
*/ Received on Fri Feb 11 2005 - 23:09:18 CET
