trapemiyaの日記

hatenablogが新しくなったんで新規一転また2019年1月からちょこちょこ書いてます。C#中心のプログラミングに関するお話です。

SQL

【SQL Server】TRANSLATE的な関数を作ってみる

SQL Server 2017からTRANSLATE関数が導入されたことはご存じだろうか? Oracleなんかには以前よりあったから、よほど要望が強かったんでしょうね。 で、実際にTRANSLATE関数を使いたいけどSQL Server 2016以前が本番環境で動いていることもまだまだたくさん…

OPENQUERYの結果を変数に入れる

OPENQUERYの結果を変数に入れるには、次のようにOUTPUTを付けた変数を定義し、それに渡します。 declare @rowcnt int; set @sqlwk = 'select @rowcnt = count(*) from openquery(edpsrd, '' select 契約番号 from mine.dbo.契約テーブル where 契約番号 = ''…

【SQL ServerからOracleへのリンクサーバー】列’xxx’に必要なデータ長に一致しないデータが返されました。必要な (最大) データ長は xxですが、返されたデータ長は xx です。

SQL ServerからOracleへのリンクサーバーを設定している状態で、例えば以下のSQLを実行すると次のエラーが出る。 select * from openquery(edpstv, 'select ''有'' as 有無 from BSS.契約 ') リンク サーバー 'edpstv' の OLE DB プロバイダー 'OraOLEDB.Ora…

OracleとSQL ServerのSQLを同時に書いているとついnullの処理でうっかりしてしまう・・・

SQL Serverで、nullの場合に他の値に置き換える関数は、isnull。Oracleは、nvl。 まぁ、これは簡単なことなんだが、nullの時に空文字に置き換えようと、SQL Serverで以下のように書いていると isnull(A項目, '') つい、Oracleでも、 nvl(A項目, '') と書い…

【Oracle】NVL関数ではまる。NZLから返される値と比較する場合、末尾の空白を考慮する必要がある

NVL関数は、レファレンスによると、NVL( 文字列 , 変換文字列 ), 文字列 がNULLの場合は、変換文字列を返します。とある。いたって簡単かつ便利な関数である。 ところがである。これにchar(2)などの固定長の項目を適用すると、末尾の空白を含めて比較しなけ…

OracleのSQLで、ERROR ORA-00907: 右カッコがありません。

久しぶりにOracleのSQLを書いていたのだが、以下のSQLで、 「ERROR ORA-00907: 右カッコがありません。」なんて謎のエラーが出た。 #下記のSQLは実際のSQLではなく、テーブル名や項目名を変え、かつ簡略化するために手動で書き換えてますので タイポとか…

【SQL Server, SQL】削除フラグのあるテーブルの抽出条件 [初心者向けネタ]

あるレコードを表示したくなくて、削除フラグとか非表示フラグなんかが定義してあるレコードがよくあると思うんだが、そんなテーブルの抽出条件はcase句を使って以下のように簡単に書ける。 ちょっとしたTipsで知っている人も多いと思うが、意外に知らない人…