2010年12月17日金曜日

bcpユーティリティと BULK INSERT

CSVファイルから SQL Serverへのデータ読み込み速度向上のため調べたもの。
結局使わなかったけど。

コマンドプロンプトから、たとえば
 bcp "tablename" IN "C:\csvfilename"
  -c -r\n -t, -q -b1000 -U username -P password

または

 BULK INSERT tablename from "C:\csvfilename"
  (ただし所有者のみ)


※テーブルの列サイズが小さいと「文字列データの右側が切り捨てられました。」とエラーになる。

SQLServerでのテーブル構造とデータ型の取得

ORACLEでは静的ディクショナリ表でテーブル構造を調べることができるのは知っていたけど、SQL Serverではこうやるらしい。

SELECT LEFT(name,30) as colname, xtype, length

FROM syscolumns
WHERE id=( SELECT id FROM sysobjects WHERE name = 'テーブル名')
ORDER BY colid

■ xtype値とデータ型の関係
  52,56:整数型(Long)
  62,106:実数型(Double)
  167:length>255ならメモ型(Memo)、その他はテキスト型(Text)
  61:日付型(DatteTime)

SQLServerでの文字型列の数値変換

CAST関数を使う

1) 文字型列の値を数値変換して並べる
SELECT DISTINCT CAST(列名 AS NUMERIC) AS COL
FROM
テーブル名
ORDER BY COL

2) 最大+1の番号をNEXTIDとして取得する
SELECT MAX(CAST(列名 AS NUMERIC))+1 AS NEXTID
FROM テーブル名


OSQLで使えるストアドプロシージャについてのメモ書き

マニュアルとか何もない状態で調べたOSQLで使えるストアドプロシージャについてのメモ書き。
(ACCESSプロジェクトにてMSDEへ接続し「ストアドプロシージャ」を参考に調査。


■オブジェクト一覧(?)を表示
exec sp_help
go

データベース情報を表示
exec sp_help_fulltext_tables
go

ユーザー情報の表示
exec sp_helpuser
go
(参考;select * from master.dbo.sysusers)

ログインID情報を表示
exec sp_helplogins
go
(参考;select * from master.dbo.syslogins)

テーブルのインデックスを調べる
exec sp_helpindex TB_EXAMCODE_MASTER
go

テーブル一覧を表示
exec sp_tables [table_name[,owner]]
go

データベース接続情報(?)を表示
exec sp_who (またはsp_who2)
go

データベース内オブジェクト一覧表示
use simlabodb
select left(name,40) as objname, id, xtype
from sysobjects
where xtype = 'U'
go
----------------------------------
xtype = S ・・・ System Table
P ・・・ Stored Procedure
U ・・・ User Table
V ・・・ View
PK ・・・ Primary Key

テーブルの列名一覧を表示
select left(name,40) as objname, xtype, length, colid
from syscolumns
where id=( select id
from sysobjects
where name='TB_EXAM_RESULT')
order by colid
go

全テーブルの列名一覧
select Left(so.name,20) as tblname,
Left(sc.name,20) as colname,
sc.xtype,
sc.length,
sc.colid
from syscolumns sc,
sysobjects so
where sc.id=so.id
order by tblname, sc.colid
GO