Уникальный Столбец SQL Server 2008 года, который Чувствителен к регистру

Как инициализировать переменную в верхней части класса со значением по умолчанию? Например:

public class SomeClass {
    private int maxRows = 15000;
    ...
    // Inside another method
    for (int i = 0; i < maxRows; i++) {
        // Do something
    }

    public void setMaxRows(int maxRows) {
        this.maxRows = maxRows;
    }

    public int getMaxRows() {
        return this.maxRows;
    }

В этом случае 15000 является магическим числом (согласно CheckStyles). Для меня установка значения по умолчанию - это нормально. Я не хочу этого делать:

private static final int DEFAULT_MAX_ROWS = 15000;
private int maxRows = DEFAULT_MAX_ROWS;

Сложнее ли это читать? Я никогда не рассматривал это, пока не установил CheckStyles.

25
задан OMG Ponies 3 October 2009 в 16:54
поделиться

2 ответа

Уникальность может быть обеспечена с помощью ограничения уникальности.

Независимо от регистра уникальности индекса определяется параметрами сортировки сервера (или таблицы) .

Вы можете получить текущее сопоставление своей базы данных с помощью этого запроса:

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;

и вы должны получить что-то вроде:

SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS

Здесь «CI_AS» в конце сопоставления означает: CI = Case Insensitive, AS = С учетом акцента.

Это можно изменить на все, что вам нужно. Если ваша база данных и / или таблица имеют сортировку с учетом регистра, я ожидаю, что уникальность вашего индекса также будет чувствительна к регистру, например, ваши abcdef и ABCDEF должны обе допустимы как уникальные строки.

Марк

ОБНОВЛЕНИЕ:

35
ответ дан 28 November 2019 в 21:16
поделиться

Если кому-то нужно сделать это на существующей таблице, в которой уже есть unique key/index, определенный в столбце varchar / nvarchar, вот сценарий.

ALTER TABLE [YourTable] DROP CONSTRAINT [UIX_YourUniqueIndex]
GO

ALTER TABLE [YourTable] ALTER COLUMN [YourColumn] [nvarchar](50) COLLATE Latin1_General_CS_AS NOT NULL;
GO

ALTER TABLE [YourTable] ADD  CONSTRAINT [UIX_YourUniqueIndex] UNIQUE NONCLUSTERED 
(
    [YourColumn] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
5
ответ дан Devraj Gadhavi 15 October 2019 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: