MW211 EXIT

devlog
MSSQL/トランザクションの片方だけ
2015年04月06日
┌──────────────────────────────────────┐
│CREATE PROCEDURE [dbo].[トランザクション開始]                               │
│AS                                                                          │
│BEGIN                                                                       │
│    BEGIN TRANSACTION;                                                      │
│END;                                                                        │
├──────────────────────────────────────┤
│CREATE PROCEDURE [dbo].[トランザクション終了]                               │
│AS                                                                          │
│BEGIN                                                                       │
│    COMMIT TRANSACTION;                                                     │
│END;                                                                        │
└──────────────────────────────────────┘
トランザクション開始と終了をそれぞれに分けて
ストアドプロシージャに定義することができる。

できる…のだが。
いたるところで怒られまくる。
┌──────────────────────────────────────┐
│EXECUTE [dbo].[トランザクション終了];                                       │
└──────────────────────────────────────┘
  メッセージ 3902、レベル 16、状態 1、プロシージャ トランザクション終了
  COMMIT TRANSACTION 要求に対応する BEGIN TRANSACTION がありません。

┌──────────────────────────────────────┐
│EXECUTE [dbo].[トランザクション開始];                                       │
└──────────────────────────────────────┘
  メッセージ 266、レベル 16、状態 2、プロシージャ トランザクション開始
  EXECUTE 後のトランザクション数は、BEGIN ステートメントと
   COMMIT ステートメントの数が一致していないことを示しています。
  以前の数 = 0、現在の数 = 1。

┌──────────────────────────────────────┐
│EXECUTE [dbo].[トランザクション終了];                                       │
└──────────────────────────────────────┘
  メッセージ 266、レベル 16、状態 2、プロシージャ トランザクション終了
  EXECUTE 後のトランザクション数は、BEGIN ステートメントと
   COMMIT ステートメントの数が一致していないことを示しています。
  以前の数 = 1、現在の数 = 0。
  ★→これはさすがによくないかい?不一致が解消されたんだから

┌──────────────────────────────────────┐
│EXECUTE [dbo].[トランザクション終了];                                       │
└──────────────────────────────────────┘
  メッセージ 3902、レベル 16、状態 1、プロシージャ トランザクション終了
  COMMIT TRANSACTION 要求に対応する BEGIN TRANSACTION がありません。
  ★→「現在の数」がマイナスに突入すると本メッセージになる
分類:MSSQL
MSSQL/今日は渋谷で5時
2015年04月05日
┌──────────────────────────────────────┐
│SELECT DATEADD(hour, 17, CONVERT(datetime, CONVERT(date, GETDATE())));      │
└──────────────────────────────────────┘
「GETDATE()」で現在日どころか、現在時刻まで取得できてしまうので、
一旦「date型」に変換することにより、時刻をクリアしてしまう。
さらに「DATEADD(hour,」で時刻を加算すれば、お望みの時刻にできるというもの。

ちなみに、「GETDATE()」を「int型」に変換することにより、
実は小数部にあたる時刻をクリアするという方法もあるらしいが、
世界標準時と日本時間の関係でおかしくなる場合があるので注意。
分類:MSSQL
MSSQL/ORDER BYの別列名
2015年04月04日
ORDER BYには別列名(AS列名)を指定できる。

以下の場合、「[表].[列2]」で並び替えが行われる。
┌──────────────────────────────────────┐
│SELECT [列1] AS [列2],                                                      │
│       [列2] AS [列1]                                                       │
│    FROM [表]                                                               │
│    ORDER BY [列1] ASC;                                                     │
└──────────────────────────────────────┘

表を直接してすれば、別列名ではなくそれで並び替えが行われる。
┌──────────────────────────────────────┐
│SELECT [列1] AS [列2],                                                      │
│       [列2] AS [列1]                                                       │
│    FROM [表]                                                               │
│    ORDER BY [表].[列1] ASC;                                                │
└──────────────────────────────────────┘
上記の場合は、「[表].[列1]」で並び替えが行われる。

基本的な以下(「[表].[列1]」で並び替えが行われる)と混同しないように注意したい。
┌──────────────────────────────────────┐
│SELECT [列1],                                                               │
│       [列2]                                                                │
│    FROM [表]                                                               │
│    ORDER BY [列1] ASC;                                                     │
└──────────────────────────────────────┘
いろいろ編集しているとやらかしそうなところだ。
分類:MSSQL
前へ 1 2 3 次へ