Re: Representation for Heterogeneous Attribute Set

From: louis <louisducnguyen_at_gmail.com>
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

Original text of this message