Я могу придумать несколько способов заставить SQL Server применить это для вас.Оба довольно хакерские, хотя и заинтересованы в том, чтобы увидеть любые другие подходы.
1) Вы можете добавить к индексированному представлению ForwardedRequestsInRequestSchemes
дополнительный столбец 1/(ForwardedToUserId - ReceivedByUserId) AS FailIfSame
, который увеличил бы Divide by zero error
, если два значения одинаковы,Это означает, что вы в конечном итоге сохраните избыточный столбец в индексированном представлении.
2) Вы можете создать новое представление, которое возвращает любые такие строки, перекрестно соединенные в двухстрочную таблицу, а затем определить уникальное ограничение для этогоПосмотреть.Это представление всегда будет пустым.
CREATE TABLE dbo.TwoRows(C INT) INSERT INTO dbo.TwoRows VALUES(1),(1)
GO
CREATE VIEW dbo.FailIfForwardedUserEqualToReceivedByUser
WITH SCHEMABINDING
AS
SELECT 1 AS C
FROM dbo.ForwardedRequests FR
INNER JOIN dbo.Requests R
ON R.Id = FR.RequestId AND R.ReceivedByUserId = FR.ForwardedToUserId
CROSS JOIN dbo.TwoRows
GO
CREATE UNIQUE CLUSTERED INDEX ix ON
dbo.FailIfForwardedUserEqualToReceivedByUser(C)