Хобрук: Ваш путь к мастерству в программировании

Создание ограничения SQL Server 2008

У меня есть таблица с двумя целочисленными столбцами и битовым столбцом. Как я могу установить ограничение на таблицу, чтобы она не допускала дублирования с комбинацией двух целых чисел с истинным. Например:

1 2 Верно
1 2 Неверно
1 2 Верно ------> Этого нельзя допускать


Ответы:


1

Это может быть тяжелее, чем вам нравится, но я считаю, что это дает то, что вы хотите. Создайте представление для строк, в которых битовый столбец имеет значение TRUE, а затем материализуйте его с помощью уникального индекса. Пример ниже работает на SQL Server 2008.

--Set statements required for creating materialized views.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON 
GO

--Set statements required when creating index for materialized views.
SET ANSI_PADDING ON 
GO
SET ANSI_WARNINGS ON 
GO
SET ARITHABORT ON   --only required in 80 compatibility mode.
GO
SET CONCAT_NULL_YIELDS_NULL ON 
GO
SET NUMERIC_ROUNDABORT OFF
GO

CREATE TABLE dbo.Test (a int not null, b int not null, c bit not null);
GO

CREATE VIEW dbo.vTest (a,b) WITH SCHEMABINDING AS 
SELECT a,b FROM dbo.Test WHERE c = 'TRUE' ;
GO

CREATE UNIQUE CLUSTERED INDEX [AK_vTest] ON dbo.vTest ( a,b );
GO

INSERT dbo.Test (a,b,c) VALUES (1,2,'TRUE');  --succeeds.
INSERT dbo.Test (a,b,c) VALUES (1,2,'FALSE'); --succeeds.
INSERT dbo.Test (a,b,c) VALUES (1,2,'FALSE'); --succeeds.
INSERT dbo.Test (a,b,c) VALUES (1,2,'TRUE');  --fails "Msg 2601, Level 14"
GO

SELECT * FROM dbo.Test
SELECT * FROM dbo.vTest

DROP VIEW  dbo.vTest
DROP TABLE dbo.Test
27.02.2010

2

создать уникальный индекс idxName на (Поле1, Поле2), где Условие = «Истина»;

27.02.2010
  • У меня нет удобной системы SQL 2k8 для тестирования, и я не уверен, разрешены ли уникальные отфильтрованные индексы: technet.microsoft.com/en-us/library/cc280372.aspx 27.02.2010

  • 3

    для этого в SSMS разверните имя таблицы, а затем нажмите кнопку записи и щелкните по ней мышью. нажмите на новый индекс в открытом меню. в окне «Новый индекс» и на вкладке «Общие» вы можете добавить свои произвольные столбцы. на вкладке фильтра добавьте выражение фильтра.

    28.02.2010

    4
  • Я думаю, что он хочет разрешить дубликаты, если col3 имеет значение False. 27.02.2010
  • Это позволит получить 1 2 true и 1 2 false. 28.02.2010
  • Новые материалы

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

    Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
    В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

    Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
    Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..

    Как реализовать линейную регрессию в JavaScript
    Узнайте, как реализовать линейную регрессию в JavaScript с помощью ML.js Линейная регрессия — это метод машинного обучения, используемый для моделирования связи между зависимой переменной и..

    Рассвет или закат ?: как контекст будет направлять разработку ИИ для компьютерного зрения в медицинской визуализации
    Рассвет или закат ?: как контекст будет направлять разработку ИИ для компьютерного зрения в медицинской визуализации Посмотрите на картинку выше. Знаете ли вы, является ли это изображением..

    Запуск LF Internship v2 (1 апреля - 1 октября 2019 г.)
    Вот и открылись двери к великолепию 😃. Как и было обещано, заявки на стажировку принимаются с 7 января по 28 февраля 2019 г. . Нажмите ссылку, чтобы подать заявку:..

    BCACTF 4.0 Writeup — Freebee (Интернет)
    Описание вызова: Я хочу прочитать эту действительно классную статью, но у них есть платный доступ. Вы можете мне помочь? Веб-адрес вызова: http://challs.bcactf.com:30771/ . Если вы..