|
SQLServer2005時代でも
|
開発の基本は T-SQL |
上巻で T-SQL の基礎作り |
|
|
SQLServer2005時代でも
|
運用の基本はバックアップ |
下巻でバックアップ手法を学びましょう |
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を! |
|
|
SQLServer必携の書 ご購入をお願いします
|
|
|
|
|
|
|
MSDE FunClub メニュー |
|
|
マイクロソフト 関連ページ |
|
|
|
MySQL 関連ページ |
|
|
|
|
|
[MySQLに対するリンクサーバーの設定:MySQLのバージョン-00010] |
この文書で使用しているMySQLのバージョンは
|
mysql> select version();
+------------+
| version() |
+------------+
| 5.0.21-log |
+------------+
|
です。
なお、新しいバージョンがリリースされているので、そのバージョンに変えることをおすすめします。
この文書で使用している MySQL は、Linux上で稼働しているものです。
|
[MySQLに対するリンクサーバーの設定:キャラクタセット-00020] |
MySQLサーバー(Linux上で稼働)のキャラクタセットの設定状況は、次の通り。
|
mysql> show variables like 'char%';
+--------------------------+--------------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------------+
| character_set_client | eucjpms |
| character_set_connection | eucjpms |
| character_set_database | eucjpms |
| character_set_filesystem | binary |
| character_set_results | eucjpms |
| character_set_server | eucjpms |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/var/share/mysql/charsets/ |
+--------------------------+--------------------------------------+
|
[MySQLに対するリンクサーバーの設定:サーバー側に組み込まれているキャラクタセットの状況-00030] |
この文書で使用しているMySQLには、以下のキャラクタセットが組み込まれています。
|
mysql> show character set;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| binary | Binary pseudo charset | binary | 1 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+----------+-----------------------------+---------------------+--------+
36 rows in set (0.00 sec)
|
実際は、不要なもの(使わないもの)は、インストールしない方がよいでしょう。
Windowsからリンクサーバーの設定を行なうときは、マイクロソフトコードページ番号932(cp932)を必ず組み込んでください。
cp932キャラクターセット
新キャラクタセット cp932 / eucjpms
Microsoftコードページ932
Legacy Encoding Project
|
[MySQLに対するリンクサーバーの設定:クライアント側ODBCドライバのインストール-00040]
|
MySQLデータベースサーバーに対して、リンクサーバーを設定する方法は、
Microsoft OLE DB Provider for ODBC Drivers
によって、MySQLのODBCドライバが使われます。
SQL Server 2000/MSDE 2000 のリンクサーバーは、OLE DB ドライバ経由で接続されます。
ここで使用されるOLE DB ドライバは、ODBCドライバを抱合するMicrosoft OLE DB Provider for ODBC Drivers が使われます。
実際のMySQL ODBCドライバは、安定版である 3.51.12.00 の、ドライバを使います。
mysql-connector-odbc-3.51.12-win32.msi から、インストールを行ないます。
|
[MySQLに対するリンクサーバーの設定:クライアント側ODBCドライバの設定-00050]
MySQLデータベースサーバー上にある、Sampleデータベースに対するODBCドライバの設定を行ないます。
|
| 「管理ツール」の「データソース(ODBC)」 の選択をします。
|
| このコンピュータ上の誰でも利用できるように、システムDSNを登録します。 追加ボタンを押します。
|
| MySQL ODBC 3.51 Driver を選択します。
|
| MySQLデータベースサーバーへ接続するときのログイン情報を設定します。
データソース名は、ここでは、SAMPLE-DB とします。
接続先サーバー名、ユーザ名、パスワードを、入力します。
MySQLの接続先データベースは、SAMPLE です。
|
| MySQLデータベースサーバーへ接続した直後に、cp932キャラクタセットに初期化するための命令を登録します。
|
| Advance(Flag1)の設定
参照:ODBCパラメータの解説
|
| Advance(Flag2)の設定
|
| Advance(Flag3)の設定
|
| Advance(Debug)の設定
|
| MySQLサーバーへの、接続試験を行ないます。 正しく、接続することができました。
|
|
[MySQLに対するリンクサーバーの設定:リンクサーバーの登録-00060]
SQL Server 2000/MSDE 2000 上で、MySQLデータベースに対するリンクサーバーを登録します。
|
ODBCデータソース SAMPLE-DB を使って、リンクサーバー名 MySQL_LinkedDB を登録します。
SQL Server 2000/MSDE 2000 上で、次のTransact-SQLスクリプトを実行します。
|
--
-- MySQLに対するリンクサーバーを設定します
--
DECLARE @DSN VARCHAR(80)
DECLARE @SRVName VARCHAR(80)
-- ODBCのシステムデータソースの名前
SELECT @DSN = 'SAMPLE-DB'
-- リンクサーバーの名前
SELECT @SRVName = 'MySQL_LinkedDB'
--
-- すでに同じ名前のリンクサーバーが登録済みのときは、それを削除します
-- 注意して下さい
--
IF EXISTS(
SELECT * FROM master.dbo.sysservers where srvname = @SRVName
)
BEGIN
-- 同じ名前のリンクサーバーが見つかりました。削除します。
EXEC sp_dropserver @server = @SRVName
END
--
-- リンクサーバーを登録します
--
EXEC sp_addlinkedserver
@server = @SRVName,
@srvproduct = 'MySQL',
@provider = 'MSDASQL',
@datasrc = @DSN
|
[MySQLに対するリンクサーバーの設定:MySQL上のSAMPLEデータベース内にtestテーブルの作成-00070]
|
MySQLのSAMPLEデータベース内に、テスト用テーブルtestを作成します。
MySQL上で、次のSQL文を実行します。
|
mysql> create table test ( code int primary key , name varchar(80) );
Query OK, 0 rows affected (0.02 sec)
mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| code | int(11) | NO | PRI | NULL | |
| name | varchar(80) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
|
[MySQLに対するリンクサーバーの設定:リンクサーバーにレコードを挿入する-00080]
|
SQL Server 2000/MSDE 2000 から、リンクサーバーにレコードを挿入します(INSERT命令の実行)
SQL Server 2000/MSDE 2000上で、次のSQL文を実行します。
|
INSERT INTO
OPENQUERY (
MySQL_LinkedDB , 'SELECT * FROM test WHERE(1=2)'
)
( code , [name] ) values( 100 , '堀川 明' )
|
INSERT構文のテーブル名を指定する部分に、OPENQUERY命令を記述します。
WHERE(1=2)のWHERE句によって、絶対成立しない条件を指定します。 無意味なレコードセットを戻さないようにします。
なお、上記の命令を実行する前に、適切なセキュリティ権限設定をMySQL上で行なって下さい。
|
mysql> select * from test;
+------+----------+
| code | name |
+------+----------+
| 100 | 堀川 明 |
+------+----------+
1 row in set (0.00 sec)
|
MySQLデータベースのキャラクタセットをcp932に設定したので、Windows機種依存文字の登録も許されます。
|
INSERT INTO
OPENQUERY (
MySQL_LinkedDB , 'SELECT * FROM test WHERE(1=2)'
)
( code , [name] ) values( 200 , '@ A B √ ' )
|
Windowsの機種依存文字を使いました。
|
mysql> select * from test;
+------+----------------------+
| code | name |
+------+----------------------+
| 100 | 堀川 明 |
| 200 | @ A B √ |
+------+----------------------+
2 rows in set (0.00 sec)
|
[MySQLに対するリンクサーバーの設定:リンクサーバーのレコードの表示-00090]
|
MySQLのリンクサーバーのテーブルに存在するレコードを、取得します。 SELECT文の実行です。
次のTransact-SQLの命令を、SQL Server 2000/MSDE 2000 で、実行します。
|
SELECT * FROM
OPENQUERY(
MySQL_LinkedDB ,
'SELECT * FROM test'
)
|
|
|
レコードの選択条件(WHERE句)は、リンクサーバー側(MySQL側)で絞り込めるように、OPENQUERY句の中に記述します。
|
SELECT * FROM
OPENQUERY (
MySQL_LinkedDB ,
'SELECT * FROM test WHERE code=100'
)
|
|
[MySQLに対するリンクサーバーの設定:リンクサーバーのレコードの表示(2)-00100]
|
OPENQUERY句の中に記述するSELECT文は、リンクサーバー側で実行されるパススルークエリです。
MySQLで提供されている関数などを記述することができます。
|
SELECT * FROM
OPENQUERY (
MySQL_LinkedDB ,
'SELECT version() AS Version'
)
SELECT * FROM
OPENQUERY (
MySQL_LinkedDB ,
'SELECT concat(123,''456'') AS Num'
)
SELECT * FROM
OPENQUERY (
MySQL_LinkedDB ,
'SELECT * FROM mysql.user where User=''Tarou'''
)
|
[MySQLに対するリンクサーバーの設定:レコードの更新-00110]
|
UPDATE文は、次のように実行します。
|
UPDATE
OPENQUERY (
MySQL_LinkedDB , 'SELECT * FROM test'
)
SET name = '山田 太郎'
WHERE( code = 200 )
|
レコードの絞込み条件(WHERE句)は、OPENQUERY句の外側に記述しました。
OPENQUERY句の中のSELECT文では、すべてのレコードを返すようにします。
なおこの例では、WHERE句をパススルークエリ内部に記述しても動きますが、ドライバなどの内部仕様が不明なので、レコードの更新や削除では、すべてのレコードを取得するのが安全だと思われます。
|
[MySQLに対するリンクサーバーの設定:レコードの削除-00120]
|
DELETE文は、次のように実行します。
|
DELETE FROM
OPENQUERY (
MySQL_LinkedDB , 'SELECT * FROM test'
)
WHERE( code = 200 )
|
[MySQLに対するリンクサーバーの設定:four-part names形式の指定はできない-00130]
|
現行のドライバを使用するときは、リンクサーバーに対する完全形式名は、エラーが発生します。
完全形式による書式:リンクサーバー名.データベース名.所有者名.オブジェクト名
このため、OPENQUERY命令などを使用します。
|
|
|
|
|