Спецы по T-SQL Help!!!

User avatar
AnyaGal
Уже с Приветом
Posts: 5771
Joined: 02 Dec 1999 10:01
Location: Saint-Petersburg --> Bellevue, WA

Спецы по T-SQL Help!!!

Post by AnyaGal »

Ковыряюсь я с .NET.
Есть база данных (myDB1)
В коде мне нужно было построить динамически Update Statement типа

Update MyTable
Set field1='value1', field2='value2'
Where field3=keyID

В дебагере я увидела ошибку и остановила приложение. К этому моменту у меня уже была построена строка

Update MyTable
Set field1='value1', field2='value2'

(то бишь без Where clause).

Так вот по каким-то непонятным для меня причинам этот statement все равно выполнился :х и в итоге у меня в огромной таблице обновились поля field1 и field2 во всех строках, не смотря на то, что я остановила приложение и SQL строка была внутри System.Text.StringBuilder и ни каких Execute statement я не выполняла. 8O

Теперь мне надо как-то все это вернуть обратно. :roll:

Есть другая база данных с той же структурой (myDB2).

Можно ли составить SQL statement, чтобы обновить field1 i field2 в myDB1 значениями field1 i field2 из таблицы с тем же именем, но из myDB2?

Полазила по help-у для Update statement, но там нет примера для манипуляций с двумя базами данных. :pain1:

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

Спасите, помогите пожалуйста. :) :cry:
Слiн
Уже с Приветом
Posts: 1407
Joined: 07 Jan 2003 19:51
Location: НорКа

Post by Слiн »

update DB1.dbo.table
set field1=(select field1 from DB2.dbo.table where id=DB1.dbo.table.id),
field2=(select field2 from DB2.dbo.table where id=DB1.dbo.table.id)
where id in (....)
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Спецы по T-SQL Help!!!

Post by Sabina »

[del]

упс вам уже ответили
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Re: Спецы по T-SQL Help!!!

Post by IA72 »

AnyaGal wrote:Update MyTable
Set field1='value1', field2='value2'

(то бишь без Where clause).

Так вот по каким-то непонятным для меня причинам этот statement все равно выполнился :х и в итоге у меня в огромной таблице обновились поля field1 и field2 во всех строках, не смотря на то, что я остановила приложение и SQL строка была внутри System.Text.StringBuilder и ни каких Execute statement я не выполняла. 8O


Как исправить вам ответили, а что касается магического выполнения апдейта, то чудес не бывает, и вполне вероятно у вас, к примеру, в watch окне сидело
sqlCommand.Execute(), которая благополучно выполнилась при останове. (сам как-то попал, дрогнула рука и попало что-то вроде stream.Read(). Потом я пошел в цикле чтения по шагам и изумленно смотрел на эффекты :)
User avatar
AnyaGal
Уже с Приветом
Posts: 5771
Joined: 02 Dec 1999 10:01
Location: Saint-Petersburg --> Bellevue, WA

Post by AnyaGal »

Спасибо огромное! :)
Выручили! :gen1:
User avatar
AnyaGal
Уже с Приветом
Posts: 5771
Joined: 02 Dec 1999 10:01
Location: Saint-Petersburg --> Bellevue, WA

Re: Спецы по T-SQL Help!!!

Post by AnyaGal »

IA72 wrote:
AnyaGal wrote:Update MyTable
Set field1='value1', field2='value2'

(то бишь без Where clause).

Так вот по каким-то непонятным для меня причинам этот statement все равно выполнился :х и в итоге у меня в огромной таблице обновились поля field1 и field2 во всех строках, не смотря на то, что я остановила приложение и SQL строка была внутри System.Text.StringBuilder и ни каких Execute statement я не выполняла. 8O


Как исправить вам ответили, а что касается магического выполнения апдейта, то чудес не бывает, и вполне вероятно у вас, к примеру, в watch окне сидело
sqlCommand.Execute(), которая благополучно выполнилась при останове. (сам как-то попал, дрогнула рука и попало что-то вроде stream.Read(). Потом я пошел в цикле чтения по шагам и изумленно смотрел на эффекты :)
\

Я правда не понимаю как это произошло. :roll:
SQL строка строится в одной процедуре, которая потом должна была вызвать следующую процедуру, где и былa Execute командa. Так до вызова этой второй процедуры даже и не дошло, я остановила дебагер раньше. :pain1:
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Спецы по T-SQL Help!!!

Post by Dmitry67 »

AnyaGal wrote:Так до вызова этой второй процедуры даже и не дошло, я остановила дебагер раньше. :pain1:


Товарищ ! Помни - поезд мгновенно остановить невозможно ! (c) плакат
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
AnyaGal
Уже с Приветом
Posts: 5771
Joined: 02 Dec 1999 10:01
Location: Saint-Petersburg --> Bellevue, WA

Re: Спецы по T-SQL Help!!!

Post by AnyaGal »

Dmitry67 wrote:
AnyaGal wrote:Так до вызова этой второй процедуры даже и не дошло, я остановила дебагер раньше. :pain1:


Товарищ ! Помни - поезд мгновенно остановить невозможно ! (c) плакат


Нет серьезно, можно ли этого избежать? :roll:
Сегодня то же самое происходит, SQL statments выполняются, правда без таких последствий (сейчас я с Insert-ом балуюсь :) , то есть просто лишние строки появляются :) )
Их найти и удалить конечно проще, но все равно достает, честно говоря. :?

Чего-то раньше в Visual Studio 6 я таких фичей не замечала.
Может это .NET просто такой быстрый, что не хочет останавливаться там где его просят. :pain1:
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: Спецы по T-SQL Help!!!

Post by tengiz »

AnyaGal, если Вы отлаживаетесь на живых данных (чего делать, разумеется, не стоит - но это Вы и без меня знаете), то хотя бы используйте явные транзакции (или включите опцию, автоматически запускающую неявную транзакцию) и всегда оставляйте себе возможность сделать rollback если что-то пошло не так.
Cheers
Dmitry S
Уже с Приветом
Posts: 1490
Joined: 24 Jan 1999 10:01
Location: Russia -> village in WA

Re: Спецы по T-SQL Help!!!

Post by Dmitry S »

AnyaGal wrote:Нет серьезно, можно ли этого избежать? :roll:
Сегодня то же самое происходит, SQL statments выполняются, правда без таких последствий (сейчас я с Insert-ом балуюсь :) , то есть просто лишние строки появляются :) )
Их найти и удалить конечно проще, но все равно достает, честно говоря. :?

Чего-то раньше в Visual Studio 6 я таких фичей не замечала.
Может это .NET просто такой быстрый, что не хочет останавливаться там где его просят. :pain1:
Мне смутно кажется, что я такое поведение видел. Вообще, хорошо было бы посмотреть код.
Я обычно предпочитаю не останавливать код "стопом". А обходить часть кода установкой следующего исполняемого оператора, если вдруг вижу, что в коде что-то не то. Обошел, закрыл программу "правильно", исправил, запустил.
User avatar
AnyaGal
Уже с Приветом
Posts: 5771
Joined: 02 Dec 1999 10:01
Location: Saint-Petersburg --> Bellevue, WA

Re: Спецы по T-SQL Help!!!

Post by AnyaGal »

tengiz wrote:AnyaGal, если Вы отлаживаетесь на живых данных (чего делать, разумеется, не стоит - но это Вы и без меня знаете), то хотя бы используйте явные транзакции (или включите опцию, автоматически запускающую неявную транзакцию) и всегда оставляйте себе возможность сделать rollback если что-то пошло не так.


Конечно данные не "живые", но все равно это тестовая база данных и ее пользуются другие девелоперы и тестеры.

Не могли бы Вы пояснить подробнее, какую опцию включить?

Dmitry S wrote:Мне смутно кажется, что я такое поведение видел. Вообще, хорошо было бы посмотреть код.
Я обычно предпочитаю не останавливать код "стопом". А обходить часть кода установкой следующего исполняемого оператора, если вдруг вижу, что в коде что-то не то. Обошел, закрыл программу "правильно", исправил, запустил.


Если это помогает, то возможно стоит приобрести такую же привычку.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: Спецы по T-SQL Help!!!

Post by tengiz »

AnyaGal wrote:Не могли бы Вы пояснить подробнее, какую опцию включить?

MSDN Online - Transact-SQL Implicit Transactions
MSDN Online - SET IMPLICIT_TRANSACTIONS {ON | OFF}
Cheers

Return to “Вопросы и новости IT”