SQL Error 16958

 16958 (重大度レベル16)  カーソルが宣言された後に、設定オプションが変更されたので、カーソル操作を完了できませんでした。

いや、カーソル内でそんなことしてないし、何の事だ?と思ったのですが、調べて行き着いたのがコチラ http://social.msdn.microsoft.com/Forums/en-SG/transactsql/thread/c798785f-2bf0-4fe5-b137-e6353f5138ec

呼ばれ先のSPの中で SET でなんかいじってないか?って。QUOTED_IDENTIFIERとか…

で、その問題の子SPを見てみたら、シッカリ一行目にそういうモノがありました。

このメッセージが出た時は、この辺りを疑ってみるのも良いでしょう。

#しかし、相変わらず、SQL Server のエラーメッセージってやつは…

SQL Server のビルド番号

一応Enterprise Manager の右下隅とかに出る訳ですが、製品名とSPです。
まぁ、たいていの場合にはそれで事が足ります。

が、もっと細かい情報が必要になる時とかは、

select @@version

とか

select SERVERPROPERTY(‘productversion’)

とかでビルド番号を調べるとかする訳です。が、ビルド番号が解っても、出てきた結果が結構訳がわからない。9.00.5000 とか、8.00.2282 とかなんじゃそりゃ?という訳で。

そういう時にはコチラ Microsoft SQL Server 2011, 2008R2, 2008, 2005, 2000 and 7.0 Builds( http://sqlserverbuilds.blogspot.com/ ) に一覧表がまとまっています。

SP ばかりではなく、各種パッチ類、CTP 、オマケに製品のコードネームまでつけるイキオイで、ちょいとお役立ち。

MSDN ライブラリ 低帯域 Version

kkamegawaさんに教えてもらいました-コチラの記事です。
これで、帯域幅が貧弱なウチの職場でも安心♪
なんですが、これだけではおもしろくないので、もう一歩。
通常版-英語
http://msdn.microsoft.com/en-us/library/cc488280.aspx
通常版-日本語
http://msdn.microsoft.com/ja-jp/library/cc488280.aspx
低帯域-英語
http://msdn.microsoft.com/en-us/library/cc488280(loband).aspx
低帯域-日本語
http://msdn.microsoft.com/ja-jp/library/cc488280(loband).aspx
低帯域版も、ちゃんと日本語対応してんでやんの♪
ありがたい話です。
ちなみに、大元ネタの VB Team blog の記事はコチラです。

oramts.dll はドコにいる?

Oracle Services For Microsoft Transaction Service の話。
やってて怒られた(DLLNotFoundException)ので、一体どこから落とせるんだ?と探した結果は、灯台もと暗し。
OTN辺りから落としてくるのではなく、Oracle client インストール時のオプションで入るのです。
デフォルトの「開発者」「instant client」では入らないので、「カスタム」を選択して、”Oracle Services For Microsoft Transaction Service ” にチェックを入れる必要があります。
ググりまくってかなり時間を浪費したのでメモと言うことで。

SQL Express で複数インスタンス存在する場合にIPのみで接続する方法

SQL Server Express で複数のインスタンスがあり、かつ、接続使用とするツールの「接続設定」に「IP」しか無い場合の設定方法。
普通の場合は、[サーバー名]¥[インスタンス名] で接続できます。
(Expressではない) SQL Server の Management Studio からもこれで接続できます。
が、そうではないツール類で、そういう入力が出来ない場合。ありがちな例としては、
・サーバーのIPアドレス(ご丁寧にガチ入力チェック付き)
・データベース名
・ポート番号
・ログインID/パスワード
しか入力できない場合-インスタンス名が入れられないのです。
こういう場合は、
「構成マネージャー」から「ネットワークの構成」→「[インスタンス名]のプロトコル」で、TCP/IPを右クリックして「プロパティ」。出てきた画面の「IPアドレス」のタブをクリック。
一番下に「TCPポート」と「TCP動的ポート」があるので、それがそのインスタンスのポート番号です。
このポート番号を指定して接続できます。
で、ポート番号も指定できないような状況なら、インスタンスのポート番号を規定値(1433)に変更してしまうのも一法でしょう(きっと)。

Oracle SQL Developer

Oracle上での開発作業と言えば”SI Object Browser“。
コレがなければ夜も日も明けない。
が、それの本家版、Oracle SQL Developer
Oracle製である上に無償(DB本体のライセンスがあることが条件)。
と、言うことで使ってみた感想とその罠とかのメモ。
・良くも悪くもOracle風。SQL Server ばかりやってきた目からすると、「かゆいところに手が微妙に届かない」
・SQL Server, Access, MySQL に接続可能
・PL/SQLのデバックも出来る…らしい(まだ試してない)
・SQL Server からの移行ツールはなかなか出来がよい
・が、やはり全自動というわけにはいかない(それでも凄い)
・生成されるSQL文、一部で「引用符が欠落してエラーになってしまう」問題がある
・11gに同梱のモノはバージョンが古いので、最新(1.2)を落としてくる必要がある
・頑張れば1.5が米国から落とせるらしいが、労多くして功少なし
・例によって英語
・エラーを返すのは良いのだが、意味不明(メッセージすら返却しない)ことがある。
・結果ペインのグリッド表示って無いの??
とまぁ色々あるのですが、実際にはかなり使えることも事実。
まぁ、こんなのもありますよってことで。

Oracle 11g の Oracle Enterprise Manager Database Control

軽めに嵌った点と評価できる点のメモ。
サーバー環境は、Windows 2003 Server R2 (E) + IE6 (なぜIE7でないのかは突っ込まないこと)。その上に Oracle 11g (E)
・10g からの流れで「Enterprise Manager」を探してしまうが、「Database Control」という名前になっている。
・クリックしてみると、IEが起動して色々と警告が出てくる。その結果として空白ページ。
・アドレスバーには”https://[サーバー名]:1158/em”とでている。
・これをIEの「信頼済みサイト」に追加する
→これで表示されるようになる。(ここまでで15分ほど嵌った)
で、https なら、他の端末からでも行けんじゃね?ということで、自端末からアクセスを試みてみる。
自端末は Vista (J) + Firefox3
・「不正なセキュリティ証明書です」と、Firefoxが警告を発する
・表示されている内容に従って、「例外サイト」として登録する。
→Firefoxの指示するままに登録していけば、表示されるようになる。
ならば、ということで、IE7 (Vista)。
・同じように「セキュリティ証明書の警告」が表示される。
・「このサイトの閲覧を続行する(推奨されません)。」をクリック
→「証明書のエラー」として、アドレスバーが赤表示になるが、とりあえず表示される。
で、評価できる点について。
上記のようにサーバーOS、インストールしたOracle 共に英語版なのですが、自機(Vista日本語版) からブラウザ経由でアクセスしたら、表示が日本語だった点。
思わず「やるな!」と思ってしまいました。
——
追記:エラーメッセージが化けるというオチがつきましたが、エラー番号は読めるからそれで良いんだよね、きっと…

さようなら、MS-IME、おかえり、ATOK

Windows 95 の時代から連綿と使ってきたわけですが、さすがに愛想が尽きました。このVista版、使えば使うほどバカになっていくような感じでして。
そんなわけで、ATOK2008にお乗り換えでございます。
MS-DOS時代にはATOK7とかでお世話になったので、それ以来実に10年以上ぶりのご無沙汰です。
で、使ってみた印象としては、「実に快適」。
金を出してでも、いいものはいいのです。さすがに金掛かってるだけのことはあります。
アンドゥやら入力の取り消しやらのよく使う動作もIMEより柔軟な漢字です。
さらに、意外と使えるのが「単漢字情報」ウィンドウ。漢字がでかく表示され、読みとか部首の情報も出るので、「字引」としても便利。
加えて、操作キーのガイダンスもツールチップ上に出たりするので、いちいち覚えてなくても快適。
かゆいところに手が届くってなもんです。
そんなわけで、
さようなら、MS-IME
おかえり、ATOK

テーブルの存在確認-SQL Server 一時テーブル編

SQL Serverで使用する一時テーブルですが、コチラで書いたような方法では存在確認をすることができません。
これは、一時テーブルはtempdbに作成されるためだと思われます。
つまり、今操作している(つもり)のデータベースとは違う所で管理されているのです。なので、今のデータベースのsysobjectsを検索しても、そりゃぁ見つからないわけです。
ではどうすればよいか?一時テーブルはtempdbに作成されるので、素直にtempdbのsysobjectsを見に行けばいいわけです。こんな感じですね。


[T-SQL]
use [AppDB]
–ここで一時テーブルを作成する
create table #tTemp
( SomeValue nvarchar(50) )
–これは0件になります
select *
from sysobjects
where
ID = object_id(‘#tTemp’)
and
ObjectProperty(ID,’IsUserTable’)=1
use [tempdb]
–tempdbに切り替えて、テーブル存在確認
select *
from sysobjects
where
ID = object_id(‘#tTemp’)
and
ObjectProperty(ID,’IsUserTable’)=1
use [AppDB]
–元のデータベースに戻して、一時テーブルを削除
drop table #tTemp

或いは、コチラでご紹介したTRY-CATCHを使うと言うのもあります。既に同名の一時テーブルが存在する場合、
2714-データベースに ‘[一時テーブル名]’ という名前のオブジェクトが既に存在します。
という番号とメッセージが返却されるので、そこで判断するという手もあります。
ご紹介まで。