Я хочу, чтобы установить связь один-к-одному между два столбцов (программный код и тестовый код) в же таблице. Я хочу, чтобы все тесты с одним и тем же тестовым кодом имели одинаковый программный код.как установить связь между двумя колоннами в одной таблице
Моя первая мысль заключалась в использовании UDF для поиска случаев, когда один и тот же тестовый код соответствует двум различным программам. Я узнал, что это не будет работать, потому что T-SQL проверяет только UDF, в проверочных ограничений после
INSERTS
- не после того, какUPDATES
why is t-sql allowing me to violate a check constraint that uses a UDP?Моя следующая мысль была перенести логику из UDF в самой проверочного ограничения. Но t-sql говорит, что подзапросы недопустимы в контрольном ограничении. Это также означает, что я не могу использовать синтаксис
EXISTS
(который, я думаю, также использует подзапрос).ALTER TABLE [dbo].[mytable] WITH CHECK ADD CONSTRAINT [oneProgramPerTest] CHECK
( (select COUNT(*) from mydb.dbo.mytable u1 inner join mydb.dbo.mytable u2 on u1.testcode=u2.testcode and u1.progcode <> u2.progcode )=0 )
Если нет какой-то способ обеспечить эту логику без (1) в ОДС или (2) подзапрос, то кажется, что мне нужно, чтобы создать «фиктивный» таблицу кодов программ и затем применяйте взаимно однозначное соотношение между тестовыми кодами от myTable и таблицы фиктивных данных. Кажется, действительно уродливый, так что должен быть лучший способ. Правильно?
Почему не просто стол FK, который связывает тестовый код с программным кодом? – Paparazzi