SQL Server: Как осуществить проверку сервера все его проверочные ограничения?

Не возможно преобразовать любую произвольную строку, представляющую число в двойное или плавание, не теряя точность. Существует много дробных чисел, которые могут быть представлены точно в десятичном числе (например, "0.1"), который может только быть приближен в двоичном плавании или дважды. Это подобно тому, как часть 1/3 не может быть представлена точно в десятичном числе, можно только записать 0.333333...

, Если Вы не хотите использовать библиотечную функцию непосредственно, почему бы не посмотреть на исходный код для тех библиотечных функций? Вы упомянули Java; большинство JDKs поставлется с исходным кодом для библиотек классов, таким образом, Вы могли искать как java.lang. Double.parseDouble (Строка) работы метода. Конечно, что-то как BigDecimal лучше для управления точностью и округления режимов, но Вы сказали, что это должно быть плавание или дважды.

25
задан Arulkumar 21 November 2017 в 07:03
поделиться

3 ответа

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS на самом деле не сделает ваши ограничения надежными. Он сообщит обо всех строках, которые нарушают ограничения. Чтобы действительно сделать все ваши ограничения надежными, вы можете сделать следующее:

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS --This reports any data that violates constraints.

--This reports all constraints that are not trusted
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled  
FROM sys.check_constraints 
WHERE is_not_trusted = 1
UNION ALL
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled  
FROM sys.foreign_keys
WHERE is_not_trusted = 1
ORDER BY table_name

В SQL Server 2000 вы можете найти любые ненадежные ограничения с помощью:

--Reports all constraints that are not trusted (SQL 2000)
SELECT name, type, status,
    (status & 2048) AS IsTrusted,
    (status & 256) AS IsEnabled,
    OBJECTPROPERTY(id,'CnstIsNotTrusted') as is_not_trusted,
    OBJECTPROPERTY(id,'CnstIsDisabled') as is_disabled
FROM sysobjects 
WHERE type IN ('C', 'F') --C=Constraint, F=Foreign Key
AND OBJECTPROPERTY(id,'CnstIsNotTrusted') <> 0
AND OBJECTPROPERTY(id,'CnstIsDisabled') = 0

Затем ограничения повторно включаются с проверкой :

--This makes all constraints trusted
-- but first anything reported by DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS must be fixed.
exec sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'

Примечание : в последнем операторе WITH CHECK CHECK не является опечаткой. Команда «WITH CHECK» проверит все данные таблицы, чтобы убедиться в отсутствии нарушений, и сделает ограничение надежным, в то время как проверка позволит убедиться, что ограничения включены.

См. Также: http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints.aspx

http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01 /12/non-trusted-constraints-and-performance.aspx

50
ответ дан 28 November 2019 в 18:23
поделиться

Нашел :

Проверяет все ограничения для всех таблиц в текущей базе данных, независимо от того, включено ли ограничение:

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS

Чтобы проверить только включенные ограничения:

DBCC CHECKCONSTRAINTS
8
ответ дан 28 November 2019 в 18:23
поделиться

сделайте это:

ALTER TABLE dbo.Test
      WITH CHECK CHECK CONSTRAINT CK_Test;

Explanation: Можете ли вы доверять своим ограничениям?

4
ответ дан 28 November 2019 в 18:23
поделиться
Другие вопросы по тегам:

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