Как я должен использовать BIT в SQL Server 2005

Оценка к производительности sql.

У меня есть скалярная функция для проверки некоторого особого условия в основе, это возвращает Битовое значение для TRUE или FALSE.

Я теперь не знаю, как я должен заполнить @BIT параметр

Если я пишу.

set @bit = convert(bit,1)

или

set @bit = 1

или

set @bit='true'

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

Другой вопрос, у меня есть таблица в моей базе приблизительно с 4 миллионами записей, ежедневная вставка о записях 4K в той таблице.

Теперь я хочу добавить ОГРАНИЧЕНИЕ на ту таблицу со скалярной функцией, которую я уже упомянул

Что-то вроде этого

ALTER TABLE fin_stavke
ADD CONSTRAINT fin_stavke_knjizenje CHECK ( dbo.fn_ado_chk_fin(id)=convert(bit,1))

где "идентификатор" является первичным ключом таблицы fin_stavke, и dbo.fn_ado_chk_fin похож

create FUNCTION fn_ado_chk_fin
(
    @stavka_id int
)
RETURNS bit
AS
BEGIN
declare @bit bit

if exists (select * from fin_stavke where id=@stavka_id and doc_id is null and protocol_id is null)
        begin
            set @bit=0


        end
    else
        begin
            set @bit=1
        end
return @bit;
END
GO

Это введет и метод проверки, что ограничение будет влиять плохо на производительность на моей таблице и SQL вообще?

Если существует также лучший способ добавить управление на этой таблице, сообщенной мне.

5
задан marc_s 27 April 2010 в 15:47
поделиться

4 ответа

Я могу ошибаться, но, судя по всему, вы хотите проверить, что не одновременно doc_id и protocol_id равно NULL ?

Для этого можно добавить ограничение таблицы .

ALTER TABLE fin_stavke
ADD CONSTRAINT fin_stavke_knjizenje CHECK ( doc_id IS NOT NULL OR protocol_id IS NOT NULL)
4
ответ дан 14 December 2019 в 04:33
поделиться

Битовая переменная может быть установлена ​​с целочисленным значением:

set @bit = 1

Иногда вам нужно фактическое битовое значение, чтобы избежать неявного преобразования, тогда вы можете выполнить Исключительное преобразование:

set @bit = cast(1 as bit)

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

1
ответ дан 14 December 2019 в 04:33
поделиться

Я бы использовал

 set @bit = 1

Это безопасно (присвоение true битам кажется неправильным), а преобразование кажется бессмысленным.

2
ответ дан 14 December 2019 в 04:33
поделиться

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

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

1
ответ дан 14 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

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