<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>データベース</title><link>http://blogs.wankuma.com/umebayashi/category/1092.aspx</link><description>データベース</description><managingEditor>梅林(umebayashi@wankuma.com)</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>梅林(umebayashi@wankuma.com)</dc:creator><title>SQL ServerとOracle (その1) : DDLとトランザクション</title><link>http://blogs.wankuma.com/umebayashi/archive/2007/02/23/63697.aspx</link><pubDate>Fri, 23 Feb 2007 01:33:00 GMT</pubDate><guid>http://blogs.wankuma.com/umebayashi/archive/2007/02/23/63697.aspx</guid><wfw:comment>http://blogs.wankuma.com/umebayashi/comments/63697.aspx</wfw:comment><comments>http://blogs.wankuma.com/umebayashi/archive/2007/02/23/63697.aspx#Feedback</comments><slash:comments>394</slash:comments><wfw:commentRss>http://blogs.wankuma.com/umebayashi/comments/commentRss/63697.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/umebayashi/services/trackbacks/63697.aspx</trackback:ping><description>&lt;P&gt;最近SQL Server 2005の勉強をしているのですが、今まで仕事で関わってきたOracleと比較すると&lt;/P&gt;
&lt;P&gt;色々異なる点がありそうなので、ネタにしてみようと思います。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;一つ目はDDLとトランザクションの関係について。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;DDLとは、表やビュー、ストアドプロシージャなどのデータベース・スキーマオブジェクトを&lt;/P&gt;
&lt;P&gt;新規に作成したり、変更や削除を行うためのSQLコマンドで、例としては&lt;/P&gt;
&lt;P&gt;(表の作成) CREATE TABLE table1 (id INT, value VARCHAR(50))&lt;/P&gt;
&lt;P&gt;(表の変更) ALTER TABLE table1 ADD CONSTRAINT pk_table1 PRIMARY KEY (id)&lt;/P&gt;
&lt;P&gt;(表の削除) DROP TABLE table1&lt;/P&gt;
&lt;P&gt;などが挙げられます。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ここで、トランザクション内でDDLを発行する場合について考えます。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Oracleでは、DDLが発行されるとトランザクションが暗黙でコミットされるため、ロールバックすることができません。&lt;/P&gt;
&lt;P&gt;一方SQL Serverでは、DDLもINSERT/UPDATE/DELETEなどのDMLと同様に、ロールバックすることができるようです。&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;BEGIN TRAN&lt;BR&gt;&amp;nbsp; CREATE TABLE test1(id INT, value VARCHAR(50))&lt;BR&gt;&amp;nbsp; INSERT INTO test1(id, value) VALUES(1, 'Hello World!')&lt;BR&gt;&amp;nbsp; SELECT * FROM test1&lt;BR&gt;ROLLBACK TRAN&lt;BR&gt;go&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;(1 件処理されました)&lt;BR&gt;&amp;nbsp;id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;----------- -------------------------------------------------- &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 Hello World!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;(1 件処理されました)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;SELECT * FROM test1&lt;BR&gt;go&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;メッセージ 208、レベル 16、状態 1、サーバー xxxxx、行 2&lt;BR&gt;オブジェクト名 'test1' が無効です。&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Oracle使いからすると意外な機能でした。&lt;/P&gt;
&lt;P&gt;他のデータベースではどうなっているのか気になります。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/umebayashi/aggbug/63697.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>