2022年4月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

SQL-Server

SQL-Server2016 JSONを扱う

SQL-Server2016からJSONがサポートされて文字列からテーブルへ簡単に変換できるようになった。非常時便利。使う機会が増えそう。

[コード例]
DECLARE @json_str VARCHAR(4000);

SET @json_str = '
{
  "rows":[
    {
      "id": "1", "no": "034"
    }
  ]
}
';

SELECT
    *
FROM
    OPENJSON (@json_str, '$.rows')
WITH (
    id INT,
    [no] VARCHAR(50)
) AS test;

これで結果セットが表示される





SQL-Server テーブルの制約名一覧

[指定したテーブルの制約名を列挙するスクリプト]

DECLARE @TABLE_NAME NVARCHAR(256)
DECLARE @TABLE_ID INTEGER

SET @TABLE_NAME = 'ここでテーブル名指定'

--削除したいテーブルのシステムidを取得する
SELECT @TABLE_ID = id FROM sys.sysobjects
WHERE xtype = 'U' AND name = @TABLE_NAME

--削除したい制約名を取得する
SELECT name FROM sys.sysobjects
WHERE id IN
(SELECT constid FROM sys.sysconstraints WHERE id = @TABLE_ID)

SQL Server2008R2インストール時のエラー

Windows2008R2にSQL Server2008R2をインストールしたら、下のようなエラーが出てとまってしまった。
「ADONETSrc.resouces~~~」

Sqlserver2008r2

途中で止まったけどSQL Serverはインストールされていた。
コントロールパネルのプログラムの追加と削除から一旦アンインストールして再度インストールしたら止まらずに普通にインストールできた。

SQL-Server2008R2 自動終了が有効になっていた

SQL-Server2008R2のExpressエディションをバックエンドDBに使用したWEBシステムで初期ログイン画面への接続が異様に遅いので調べてみた。

サーバのイベントビューアのアプリケーションログに「データベース'hoge'を起動しています」というログが結構な頻度で出ていた。
Management StudioでDBの設定を確認すると「自動終了」オプションがTrue(有効)になっていた。
一定時間間隔が空くとDBがシャットダウンされて、再接続時に時間がかかっていたと思われる。

設定を変更した記憶がないため、デフォルトで有効になっていたようだ。
以前のバージョンではデフォルトでは無効だったと思われるので注意しないと。
(Express特有の設定かもしれないが・・・)

【SQL-Server】 ManagementStudioの設定

ManagementStudio(2008R2)からテーブルの項目を変更・追加をしようとした以下のエラーが出た場合は、設定を変更する必要がある。

「変更の保存が許可されていません。
行った変更には、次のテーブルを削除して再作成することが必要になります。
再作成できないテーブルに変更を行ったか、テーブルの再作成を必要とする変更を保存できないようにするオプションが有効になっています」

メニューの「ツール」→「オプション」のデザイナー(Designers)の「テーブルの再作成を必要とする変更を保存できないようにする」のチェックをはずす。

Tableremake_2






[SQL-Server] データ削除

あるテーブル(hogetbl)のデータで項目hogedayが前年の8月から今年の3月までのデータを削除したかったので以下のようなSQL文を書いて実行したら4月以降のデータまで消えてしまい、焦った・・・

DELETE FROM hogetbl WHERE CONVERT(VARCHAR, hogeday, 111) BETWEEN '2011/08/01' AND '2012/3/31'

'2012/3/31'がまずかった!
本来なら'2012/03/31'と書くべきだった・・・

文字列同士の比較は危険なので本来は以下のように日付で比較すべきである。

DELETE FROM hogetbl WHERE  hogeday BETWEEN CONVERT(DATETIME, '2011-08-01 00:00:00', 102) AND  CONVERT(DATETIME, '2012-03-31 00:00:00', 102)





SQL Server Express Edition の制限

SQL Server Express Edition の機能制限は↓が参考になりました。

@IT   ここまで使えるSQL Server Express Edition
http://www.atmarkit.co.jp/fwin2k/tutor/sqlexplmt/sqlexplmt_02.htm

主なところでは、利用可能なメモリ容量が1G、データベースサイズが4G(R2は10G)までといったところでしょうか。


SQL-Server2005 信頼関係接続できない場合

エラー番号:18456
ユーザー '<user_name>' はログインできませんでした

ログイン時に上記エラーがでる場合は、SQL-Sever2005のログインユーザーを追加してあげればOK

SQL Server Management Studioで該当サーバーを開く→セキュリティ→ログインでWindowsユーザーを追加
Geustユーザーを追加しておけばすべてのユーザーから信頼関係接続できるみたい。(セキュリティ的には大問題だが)
また、ユーザーマッピングでログインさせたいデータベースに適切な権限(db_owner等)にチェックしておく必要がある

SQL-Server ビューのSELECT文を表示

ビューのSELECT文を表示するにはシステムストアドのsp_helptextを使用します。

[例]
sp_helptext ビュー名

SQL-Server テーブル項目の追加

ALTER TABLEの構文をすぐに忘れてしまうのでメモ。

(例)
ALTER TABLE テーブル名 add
    項目名1  VARCHAR (3) DEFAULT '' NOT NULL,
    項目名2  VARCHAR (10) DEFAULT '' NOT NULL

項目は最後の列に追加される。

より以前の記事一覧