Различие SQL Server Check/NoCheck в сгенерированных сценариях

Никогда не должны Вы использовать деньги. Это не точно, и это - чистый мусор; всегда используйте десятичный/числовой.

Выполнение это для наблюдения то, что я имею в виду:

DECLARE
    @mon1 MONEY,
    @mon2 MONEY,
    @mon3 MONEY,
    @mon4 MONEY,
    @num1 DECIMAL(19,4),
    @num2 DECIMAL(19,4),
    @num3 DECIMAL(19,4),
    @num4 DECIMAL(19,4)

    SELECT
    @mon1 = 100, @mon2 = 339, @mon3 = 10000,
    @num1 = 100, @num2 = 339, @num3 = 10000

    SET @mon4 = @mon1/@mon2*@mon3
    SET @num4 = @num1/@num2*@num3

    SELECT @mon4 AS moneyresult,
    @num4 AS numericresult

Вывод: 2949.0000 2949.8525

некоторым людям, которые сказали, что Вы не делите деньги на деньги:

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

select t1.index_id,t2.index_id,(avg(t1.monret*t2.monret)
    -(avg(t1.monret) * avg(t2.monret)))
            /((sqrt(avg(square(t1.monret)) - square(avg(t1.monret))))
            *(sqrt(avg(square(t2.monret)) - square(avg(t2.monret))))),
current_timestamp,@MaxDate
            from Table1 t1  join Table1 t2  on t1.Date = traDate
            group by t1.index_id,t2.index_id
26
задан Nick Kavadias 1 September 2009 в 13:54
поделиться

3 ответа

Конечный результат не тот!

SQL Server не будет доверять уникальности FK, если она не проверена. Это означает, что при использовании столбца в запросе потребуется дополнительная обработка.
Короче говоря, вы должны заставить SQL Server проверить столбец, чтобы он считался надежным.

Что касается того, почему они отличаются от разных серверов, проверьте столбец isnottrusted в sys.foreign_keys. Это может повлиять на то, что генерирует SSMS?

Чтобы узнать больше, проверьте мой другой ответ , который относится к параметрам FK & NO CHECK / CHECK.

20
ответ дан 28 November 2019 в 07:27
поделиться

Да, это два разных сценария.

WITH CHECK проверяет существующие данные на соответствие новому ограничению.
WITH NOCHECK не проверяет существующие данные на соответствие новым ограничение. Это позволит вам иметь дочерние записи без соответствующего родителя.

РЕДАКТИРОВАТЬ: Что касается того, почему SSMS делает это, я понятия не имею

20
ответ дан 28 November 2019 в 07:27
поделиться

Оба являются серверами SQL Server 2005? Поскольку результат один и тот же, инструмент генерации кода может использовать разные процедуры, основанные на разных версиях продукта

0
ответ дан 28 November 2019 в 07:27
поделиться
Другие вопросы по тегам:

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