我有一个包含'属性'
的表格ID Text
-----------
1 Name
2 Surname
3 D.O.B.
4 City
另一张包含'人物'
的表格ID Code
-----------
1 MN0001
2 ST0001
3 ST0002
另一张表' propertiesPeople'关联那2个表。一个人可能有一定数量的属性。
ID IDPerson IDProp Value
----------------------------------
1 1 1 Peter
2 1 2 Johnson
3 2 1 John
4 2 3 01/01/1977
5 1 4 California
6 3 1 Julian
7 3 2 Ross
8 3 4 Osaka
在插入一个人/人之前,我需要验证没有其他具有相同属性的属性(要验证的属性是可变的,它将存储在另一个表" propertiesToValidate')
我想过制作一个动态SQL围绕“属性”进行循环。而这个选择将完成如下:
SELECT p1.Value, p2.Value, p3.Value
FROM properties p1
INNER JOIN properties p2 ON p1.IDPerson=p2.IDPerson
INNER JOIN properties p3 ON p1.IDPerson=p3.IDPerson
WHERE p1.IDProp = 1
AND p2.IDProp = 2
AND p3.IDProp = 4
并将其插入到一个完成此类操作的时态表中:
Value1 Value2 Value3
--------------------------------
Peter Johnson California
Julian Ross Osaka
在那之后,我会与一张桌子相交,我想插入新人/人。
我认为创建一个动态字符串并使用sp_executesql调用后不是一种优雅的方法(并且将来很复杂),但我无法实现另一种方法。还有另一种方式吗?
答案 0 :(得分:0)
我只想添加UNIQUE
约束:
CREATE TABLE #propertiesPeople(
ID VARCHAR(34) NOT NULL PRIMARY KEY
,IDPerson INTEGER
,IDProp INTEGER
,Value VARCHAR(10)
,UNIQUE(IDPerson, IDProp)
);
INSERT INTO #propertiesPeople(ID,IDPerson,IDProp,Value) VALUES ('1',1,1,'Peter');
INSERT INTO #propertiesPeople(ID,IDPerson,IDProp,Value) VALUES ('2',1,2,'Johnson');
INSERT INTO #propertiesPeople(ID,IDPerson,IDProp,Value) VALUES ('3',2,1,'John');
INSERT INTO #propertiesPeople(ID,IDPerson,IDProp,Value) VALUES ('4',2,3,'01/01/1977');
INSERT INTO #propertiesPeople(ID,IDPerson,IDProp,Value) VALUES ('5',1,4,'California');
INSERT INTO #propertiesPeople(ID,IDPerson,IDProp,Value) VALUES ('6',3,1,'Julian');
INSERT INTO #propertiesPeople(ID,IDPerson,IDProp,Value) VALUES ('7',3,2,'Ross');
INSERT INTO #propertiesPeople(ID,IDPerson,IDProp,Value) VALUES ('8',3,4,'Osaka');
当有人试图插入时:
INSERT INTO #propertiesPeople(ID,IDPerson,IDProp,Value) VALUES ('9',3,4,'Osaka2');
将获得:
违反UNIQUE KEY约束'UQ __#properties__918436F84D776654'。 无法在对象'dbo。#propertiesPeople'中插入重复键。该 重复键值为(3,4)。
的 LiveDemo
强>