CREATE FUNCTION dbo.GetRow(@XMLDT AS xml)
RETURNS nvarchar(10)
WITH SCHEMABINDING
AS
BEGIN
RETURN @XMLDT.value('(./row/text())[1]','nvarchar(10)');
END;
ALTER TABLE dbo.IQ
ADD RowValue AS dbo.GetRow(XMLDT);
以及强制执行所需唯一性的约束:
ALTER TABLE dbo.IQ
ADD CONSTRAINT UQ__IQ_XMLDT_RowValue
UNIQUE (RowValue);
演示:
-- Succeeds
INSERT INTO IQ (XMLDT)
VALUES('<row>sdsdf</row>');
-- Msg 2627, Level 14, State 1, Line 1
-- Violation of UNIQUE KEY constraint 'UQ__IQ_XMLDT_RowValue'
INSERT INTO IQ (XMLDT)
VALUES('<row>sdsdf</row>');
鉴于此表:
我们首先需要一个标量函数来从 XML中提取感兴趣的值:
现在我们可以添加一个使用该函数的计算列:
以及强制执行所需唯一性的约束:
演示: