ちょっとSQL文書く
備忘録的な的な
対象はSQL Server
試した環境はSQL Server2008 R2 Exp
テーブルの構造を取得する
列の型を取得する
--------SQL--------
WHEREでT.nameにテーブル名で抽出すると対象のテーブルの構造が取得できる。
sys.tablesを変えるとsys.viewsに変えるとビューの構造が取得できる。
SQL文の中で配列を使う
--------SQL--------
テーブルを擬似的に配列として扱う方法
SQLで条件が無い場合全件検索を行い
条件がある場合は抽出を行う
抽出条件はORとする
--------SQL--------
さっきの配列を使い回してる方法
@Arrayのテーブルが0件だと全件検索
データがあるとor検索
ORで接続することでショートサーキットを発生させ後ろの検索条件を無効にする
あとは
実際に試す環境が無いのであれだが…
Windows Vista/7、Server2008/2008R2から
Windows MobileとかCEのPDAとかでSQL Server Compact のsdfファイルを入れて開くと遅くなる現象を回避する案
現象内容
Windows XP Server2003で作ったsdfファイルは
WindowsConsoleアプリをC#で組んで
↓のコードでコンパイルする
できあがったexeを互換性モードのWindowsXPで動かす
SQLConnectStringは適当に変えて下さい
exeにsdfファイルをD&DすればREINDEXされるみたいです
一応Windows7上で適当に作ったsdfファイルで実行すると先頭3バイトと途中1バイトx4カ所が書き換わっていた
テーブルの構造にもよると思うけど…
レジストリからXPモード指定が出来るので方法はぐぐる
//--------C#--------
単純に開いて閉じるだけ
対象はSQL Server
試した環境はSQL Server2008 R2 Exp
テーブルの構造を取得する
列の型を取得する
--------SQL--------
SELECT T.name AS [TableName], C.column_id AS [ColumnNo], C.name AS [ColumnName], CASE WHEN TY.name IN ('binary','varbinary') THEN TY.name + '(' + CASE WHEN C.max_length = -1 THEN 'max' ELSE CAST(C.max_length AS nvarchar(10)) END + ')' WHEN TY.name IN ('nvarchar','nchar') THEN TY.name + '(' + CASE WHEN C.max_length = -1 THEN 'max' ELSE CAST(C.max_length / 2 AS nvarchar(10)) END + ')' WHEN TY.name IN ('decimal','numeric') THEN TY.name + '(' + CAST(C.precision AS nvarchar(10)) + CASE WHEN C.scale = 0 THEN '' ELSE ',' + CAST(C.scale AS nvarchar(10)) END + ')' ELSE TY.name END AS [Type], CASE C.is_nullable WHEN 1 THEN 'false' WHEN 0 THEN 'true' END AS [NOTNULL], CASE WHEN F.index_column_id IS NOT NULL AND E.is_primary_key = 1 THEN 'true' ELSE 'false' END AS [PrimaryKey], CASE WHEN C.is_identity =0 THEN 'false' ELSE 'true' END AS [AutoNumber], CASE WHEN C.default_object_id != 0 THEN D.definition END AS [DefaultValue] FROM sys.tables T INNER JOIN sys.columns C ON T.object_id = C.object_id INNER JOIN sys.types TY ON TY.user_type_id = C.user_type_id LEFT OUTER JOIN sys.default_constraints as D ON C.default_object_id = D.object_id LEFT OUTER JOIN sys.indexes AS E ON T.object_id = E.object_id AND E.is_primary_key = 1 LEFT OUTER JOIN sys.index_columns AS F ON T.object_id = F.object_id AND C.column_id = F.column_id ORDER BY T.name,C.column_id--------SQL--------
WHEREでT.nameにテーブル名で抽出すると対象のテーブルの構造が取得できる。
sys.tablesを変えるとsys.viewsに変えるとビューの構造が取得できる。
SQL文の中で配列を使う
--------SQL--------
DECLARE @Array table(num int unique, data varchar(50)); INSERT INTO @Array VALUES(0,'AAAA'); INSERT INTO @Array VALUES(1,'BBBB'); INSERT INTO @Array VALUES(2,'CCCC'); -- Length SELECT COUNT(*) FROM @Array; -- GetValue SELECT data FROM @Array WHERE 0 = num; -- 配列の中に存在するデータをテーブルのdataから検索する SELECT * FROM hogeTable WHERE data IN (SELECT data FROM @Array);--------SQL--------
テーブルを擬似的に配列として扱う方法
SQLで条件が無い場合全件検索を行い
条件がある場合は抽出を行う
抽出条件はORとする
--------SQL--------
-- 配列の中に存在するデータをテーブルのdataから検索する -- 配列の中にデータが存在しない場合全件出力する SELECT * FROM hogeTable WHERE (((SELECT COUNT(*) FROM @Array = 0) OR data IN (SELECT data FROM @Array));--------SQL--------
さっきの配列を使い回してる方法
@Arrayのテーブルが0件だと全件検索
データがあるとor検索
ORで接続することでショートサーキットを発生させ後ろの検索条件を無効にする
あとは
実際に試す環境が無いのであれだが…
Windows Vista/7、Server2008/2008R2から
Windows MobileとかCEのPDAとかでSQL Server Compact のsdfファイルを入れて開くと遅くなる現象を回避する案
現象内容
Windows XP Server2003で作ったsdfファイルは
WindowsConsoleアプリをC#で組んで
↓のコードでコンパイルする
できあがったexeを互換性モードのWindowsXPで動かす
SQLConnectStringは適当に変えて下さい
exeにsdfファイルをD&DすればREINDEXされるみたいです
一応Windows7上で適当に作ったsdfファイルで実行すると先頭3バイトと途中1バイトx4カ所が書き換わっていた
テーブルの構造にもよると思うけど…
レジストリからXPモード指定が出来るので方法はぐぐる
//--------C#--------
static void Main(string[] args) { String FileName = null; FileName = String.Format("Data Source = '{0}'; Encrypt = FALSE;", args[0]); Console.WriteLine(FileName); using (SqlCeConnection con = new SqlCeConnection(FileName)) { con.Open(); con.Close(); } }//--------C#--------
単純に開いて閉じるだけ
2012-03-10 03:52
nice!(0)
コメント(0)
トラックバック(0)
コメント 0