SQL 2005 Update - количество ошибок - PullRequest
1 голос
/ 16 июля 2010

Я использую MS SQL Server 2005. Когда я выбираю набор строк из таблицы с соответствующим условием where, он возвращает значение как 31. То же самое значение выбора, если я обновляю другую таблицу, он обновляет как 30. I использовал обновление SQL следующим образом

update tablename
set column1 = (Select column2 from tablename
                where month(field1) = 05 and year(field1) = 2010)
where field 2 = 'xxx'

Если я выполняю только один внутренний выбор, он возвращает значение в столбце 2 как 31. После выполнения обновления и выбора из обновленной таблицы оно отображается как 30.

Только 1 разность чисел для многих строк ...

Может ли кто-нибудь столкнуться с этой проблемой ...

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Я просматриваю посты, помеченные как неотвеченные с тех пор, как присоединился к этому удивительному сайту ... не уверен, что это правильный подход для старых постов, но пока кто-то не скажет мне остановиться, я думаю, я буду продолжать, лол.

Итак, вот что я вижу с этой проблемой:

Если вы знаете, что можете ВЫБРАТЬ общий набор записей, то вы можете сразу перейти к тому, что вы пытаетесь сделать с ним, кроме ВЫБРАТЬ.

Замечу, что вы не пытаетесь ВСТАВИТЬ результат, но это ОБНОВЛЕНИЕ. Поскольку вы обновляете существующие строки, и поскольку единственным предложением является поле WHERE 2 = 'xxx', вы можете быть уверены, что у вас есть одна строка, не соответствующая вашему WHERE. Звучит как простая проблема целостности данных для этой строки.

Чтобы найти строку с ошибками, выполните запрос к вашей таблице как NOT IN или <> в зависимости от типа данных.

0 голосов
/ 16 июля 2010

Без определения таблицы это будет очень сложно, но прежде всего нужно проверить, есть ли в таблице триггеры, которые меняют значение.Второе - начать отладку, что означает разбивку вашего кода:

declare @column2 as int

Select @column2 = column2 from tablename where month(field1) = 05 and year(field1) =2010

--Check whether @column2 is equal to 31.
select @column2

update tablename
set column1 = @column2
where field 2 = 'xxx'

--Check whether column1 in tablename is equal to 31
select column1
from tablename
where field 2 = 'xxx'

Я предполагаю, что проблема в том, что вы перепутали некоторые имена столбцов, вы использовали 'column1', 'column2','field1' и 'field 2' - все из одной таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...