t-SQL – ограничение на один столбец с несколькими условиями

В настоящее время я реструктурировал плохо разработанную базу данных, одна из вещей, которую я хочу сделать для целей целостности, – сделать определенную запись уникальной, зависящей от нескольких переменных.

Таблица, которую я использую, – это котировки, рассматриваемый столбец – это номер котировки, для чего я должен быть уникальным для каждой компании и группы, поэтому, например, Quote001 должен быть уникальным, если не используется новая компания / группа.

Таким образом, вы могли бы иметь Quote001 с Quote001 и group1 , но тогда, если новая цитата будет сделана с company1 и group1 новый номер котировки должен быть Quote002 . Однако, если Company2 и group1 делают цитату, она должна вернуться к Quote001 .

Я не уверен, как добиться этого наиболее эффективно, используя ограничения в базе данных.

Спасибо, Дэвид

Вам нужно уникальное ограничение.

  ALTER TABLE Quotes ADD CONSTRAINT ucQuote UNIQUE (QuoteNumber, Company, Group) 

Если у вас уже есть столбец идентификатора в этой таблице, я бы использовал его для создания вычисленного столбца для номера qoute. Если у вас его нет, вы можете добавить его.

Для этого сначала вам нужно определить UDF, который будет выполнять расчет для вас:

 CREATE FUNCTION dbo.CalculateQuoteNumber(@id int, @Company int, @Group int) RETURNS int AS BEGIN RETURN ( SELECT COUNT(*) FROM YourTable WHERE Company = @Company AND [Group] = @Group AND id <= @id ) END GO 

Затем вы добавляете номер Quote в качестве расчетного столбца:

 ALTER TABLE YourTable ADD QuoteNumber as dbo.CalculateQuoteNumber(id, Company, [Group]) 

Теперь сервер sql выполнит расчет для вас, и вы будете в безопасности, поскольку вычисленные столбцы не могут быть вставлены или обновлены пользователями.

Вы можете увидеть живую демонстрацию в реестре.

  • SQL-ограничения или условие
  • Кондитируйте для проверки ограничений
  • Запрос на проверку ограничений SQL Server
  • Удалить все записи, которые не имеют ограничений по внешнему ключу
  • Проверить ограничение - разрешить только один столбец, если другой столбец верен
  • Как разместить уникальные ограничения для нескольких столбцов
  • Проблемы ограничения SQL CHECK
  • SQL Server 2008 - получить ограничения таблицы
  • SQL Server - Обеспечение уникальности в одном столбце в зависимости от другого столбца
  • Как изменить длину varchar в составном первичном ключе?
  • UNIQUE - способ иметь уникальные строки в таблице?
  • Interesting Posts

    Как подсчитать, сколько точек пересекает каждый многоугольник, используя SQL SERVER

    Самый эффективный и надежный способ получить Unix-файлы в SQL Server

    sql server – столбец Sum (), но добавьте столбец Y только один раз

    Чтение набора данных данных хранимой процедуры

    Неиспользуемый столбец в плане выполнения MS SQL

    SSIS проверяет наличие файлов * .csv в папке

    Поиск разницы во времени в sql-сервере за один раз

    Как установить SQL Server Express 2014 в Vagrant без рабочего стола?

    Запрос на получение количества элементов с заданным статусом в течение заданного периода времени

    Как экспортировать строки SQL Server 2005 в Excel? Каждый раз, когда я делаю это, я получаю ошибки

    Сохраненная процедура медленнее запроса в SSMS

    счетчик столов sql при заданном пороге

    Внутреннее соединение SQL в столбце на основе максимального значения из другого столбца

    Как объяснить риски разработки Access 2007 и SQL Server

    Как установить дату запуска и изменения с помощью одной команды SQL Update?

    Давайте будем гением компьютера.