SQLの窓

2020年02月11日


Microsoft SQLExpress : sa に空のパスワードを設定する方法


ALTER LOGIN sa WITH CHECK_POLICY = OFF
ALTER LOGIN sa WITH PASSWORD = ''

CHECK_POLICY = OFF を実行しない場合は、以下のようなメッセージが表示されます

メッセージ 15118、レベル 16、状態 1、サーバー VPC-028\SQLEXPRESS、行 1
パスワードの検証に失敗しました。このパスワードは Windows のポリシーで指定された
強力なパスワードの基準を満たすほど複雑ではありません。
関連する Microsoft ドキュメント パスワード ポリシー ALTER LOGIN (Transact-SQL) 強力なパスワード プログラムによるパスワードの変更 別のコンピューターからの接続 関連する Microsoft ダウンロード Microsoft SQL Server 2016 Express Edition SP2 Microsoft SQL Server 2017 Express 関連する記事 SQLExpress 2005 の接続設定 LoginMode のあるレジストリを開くスクリプト ログインモード設定 ( Windows 認証 : 1、混合モード認証 : 2 ) sa を使う場合は 2 です
// レジストリ書き込み用
var WshShell = new ActiveXObject("WScript.Shell");
// 管理者権限実行用
var Shell = new ActiveXObject("Shell.Application");

var path = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SQL Server";

var sqs = WshShell.RegRead( path + "\\Instance Names\\SQL\\SQLEXPRESS" );

path = path + "\\" + sqs + "\\MSSQLServer"

openReg(path)

function openReg(path) {

	// 既に regedit が実行中の場合はいったん終了させます
	Shell.ShellExecute( "taskkill.exe", "/fi \"imagename eq regedit.exe\"", "", "runas", 1 );

	// 1秒スリープ
	WScript.Sleep(1000);
	// WshShell.Run( "timeout /T 1", 0, true );

	// レジストリエディタが最後に開いていたキーの登録を行います
	var strPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit\\LastKey";
	WshShell.RegWrite( "HKCU\\" + strPath, path, "REG_SZ" );

	// レジストリエディタを起動します
	WshShell.Run( "regedit.exe" )

}


別名が定義された場所を開くスクリプト
// レジストリ書き込み用
var WshShell = new ActiveXObject("WScript.Shell");
// 管理者権限実行用
var Shell = new ActiveXObject("Shell.Application");

var path = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSSQLServer\\Client\\ConnectTo";

openReg(path)

function openReg(path) {

	// 既に regedit が実行中の場合はいったん終了させます
	Shell.ShellExecute( "taskkill.exe", "/fi \"imagename eq regedit.exe\"", "", "runas", 1 );

	// 1秒スリープ
	WScript.Sleep(1000);
	// WshShell.Run( "timeout /T 1", 0, true );

	// レジストリエディタが最後に開いていたキーの登録を行います
	var strPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit\\LastKey";
	WshShell.RegWrite( "HKCU\\" + strPath, path, "REG_SZ" );

	// レジストリエディタを起動します
	WshShell.Run( "regedit.exe" )

}

SQL Server の別名定義用のソフトウェアが無い場合、ODBC ドライバの SQLServer の接続用構成の、クライアントの設定ボタンで確認あるいは定義してみて下さい。( ポートは 固定で 1433 を指定し、サーバ側も固定で 1433 を指定して ファイアウォールのポートを開きます  )



※ ODBC で接続を成功完了する必要があります


関連する Microsoft ドキュメント

SQL Server のバージョンとエディションを識別する方法


このページの PDF


posted by lightbox at 2020-02-11 11:25 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2019年12月26日


SQLExpress バッチ DB バックアップ

タスクスケジューラにバッチファイルを登録して運用しています。Windows Server に登録していますが、注意するのは『開始オプション』のフィールドにバッチファイルが存在するフォルダを指定する事と、ユーザのログオンの有無にかかわらず実行可能にするという事です( 可能なら最上位の特権で )

バックアップなので、同じ PC 上に保存しても意味無いのでネットワーク上の別のサーバーへコピーしています。このバッチを2種類作り、保存フォルダも二つ作って1日おきに交互にコピーするようにしています。

backup.sql
use DB名
go
BACKUP DATABASE DB名 TO DISK = 'C:\保存場所\DB保存名.dat'
go


バッチファイル
del C:\保存場所\DB保存名.dat

sqlcmd -E -S .\SQLEXPRESS -t 3600 -i C:\batch\db\backup.sql

net use x: \\PC名\共有名 パスワード /USER:ユーザ名

copy C:\保存場所\DB保存名.dat X:\共有内保存フォルダ

net use x: /DELETE /yes

※ 3600 は タイムアウト設定

関連する情報

リストア

このページの PDF



posted by lightbox at 2019-12-26 14:05 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2018年10月09日


C# : VB.net : SQLExpress(SQLServer) : SQL-DMO と同等の SMO によるバックアップ

SQL-DMO は、COM なので主に VBScript から使われていましたが、SMO は、SQL-DMO に取って代わる Framework ベースの API です。もともとが巨大なクラスの集合体なので、バックアップにしか通常使う事がありませんが、SQLServer の運用を行うなら知っておく必要はあります

バックアップは SQL からも出来、そちらのほうが簡単です。SQL-DMO や SMO は、テープによるデータのバックアップを想定しており、デバイスを作成しても実体は作成されません。ディスクファイルでも、追加でバックアップされます

バックアップ後の内容の確認は以下のようにして行います
RESTORE FILELISTONLY FROM DISK = 'C:\tmp\backup.dmp'
参照としては以下の5つを追加します 1) Microsoft.SqlServer.ConnectionInfo 2) Microsoft.SqlServer.Management.Sdk.Sfc 3) Microsoft.SqlServer.Smo 4) Microsoft.SqlServer.SmoExtended 5) Microsoft.SqlServer.SqlEnum SMO ライブラリのダウンロードは nuget.exe が簡単です。 nuget.exe をダウンロードして専用のフォルダで実行します。
nuget install Microsoft.SqlServer.SqlManagementObjects -Version 140.17283.0
※ バージョン選択の参考ページ nuget.exe と同じ場所に、Microsoft.SqlServer.SqlManagementObjects.140.17283.0 フォルダが作成されるので、lib\net40 内から dll を参照して使用します。 ▼ C#
// サーバー
Server srv;
// インスタンス
srv = new Server();

// サーバーインスタンスの情報
srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect;
srv.ConnectionContext.LoginSecure = false;
srv.ConnectionContext.Login = "sa";
srv.ConnectionContext.Password = "パスワード";
// 接続
srv.ConnectionContext.Connect();

// バージョンの表示
Console.WriteLine(srv.Information.Version);

// デバイスオブジェクト
BackupDevice backup_dev = new BackupDevice();

// サーバーと関係付ける
backup_dev.Parent = srv;
// 論理名を設定
backup_dev.Name = "BACKUP";
// 装置のタイプ
backup_dev.BackupDeviceType = BackupDeviceType.Disk;
// 実際の場所( バックアップするまで作成されません )
backup_dev.PhysicalLocation = @"c:\tmp\backup.dmp";

// 処理サンプルとして一旦削除して作成する
if (srv.BackupDevices["BACKUP"].State == SqlSmoState.Existing)
{
	srv.BackupDevices["BACKUP"].Drop();
	backup_dev.Create();
}

// バックアップオブジェクト
Backup dbBackup = new Backup();

// デフォルトは Database
dbBackup.Action = BackupActionType.Database;
dbBackup.Database = "lightbox";
dbBackup.Devices.AddDevice("BACKUP", DeviceType.LogicalDevice);
dbBackup.BackupSetName = "BACKUP_lightbox";

// バックアップ開始
dbBackup.SqlBackup(srv);

// 接続解除
srv.ConnectionContext.Disconnect();

Console.WriteLine("バックアップが終了しました");

▼ VB.net
' サーバー
Dim srv As Server
' インスタンス
srv = New Server()

' サーバーインスタンスの情報
srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect
srv.ConnectionContext.LoginSecure = False
srv.ConnectionContext.Login = "sa"
srv.ConnectionContext.Password = "パスワード"
' 接続
srv.ConnectionContext.Connect()

' バージョンの表示
Console.WriteLine(srv.Information.Version)

' デバイスオブジェクト
Dim backup_dev As BackupDevice = New BackupDevice()

' サーバーと関係付ける
backup_dev.Parent = srv
' 論理名を設定
backup_dev.Name = "BACKUP"
' 装置のタイプ
backup_dev.BackupDeviceType = BackupDeviceType.Disk
' 実際の場所( バックアップするまで作成されません )
backup_dev.PhysicalLocation = "c:\tmp\backup.dmp"
Try
	' 既に存在する場合はそのまま使う
	backup_dev.Create()
Catch ex As Exception
End Try


' バックアップオブジェクト
Dim dbBackup As Backup = New Backup()

' デフォルトは Database
dbBackup.Action = BackupActionType.Database
dbBackup.Database = "lightbox"
dbBackup.Devices.AddDevice("BACKUP", DeviceType.LogicalDevice)
dbBackup.BackupSetName = "BACKUP_lightbox"

' バックアップ開始
dbBackup.SqlBackup(srv)

' 接続解除
srv.ConnectionContext.Disconnect()

Console.WriteLine("バックアップが終了しました")

関連する記事

SQLServer : SQLでバックアップ
SQL-DMO による VBScriptによるバックアップ

関連するMicrosoft のリンク

SMO クラス ライブラリ
SQL-DMO のインストール( SQLServer2005_BC.msi )



posted by lightbox at 2018-10-09 15:40 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2018年09月01日


各RDBMS の正規表現の実装状況 : MySQL, SQLServer, PostgreSQL, Oracle

今日この日まで、SQL の条件に『正規表現』を使うという発想が無かったのですが(たいていそんな複雑な事はしないし解りにくい)、最近は日本人以外のカタカナ氏名の検索をする事が多くなった事を起因とする要望から、『どうなんだろう』と思って調べた結果です。( 外国人のカタカナ表記では微妙にゆらぎがあるのです )

※ 結果的にウチは、SQLServer なので、or で文字列作っていくよりは楽になりそうです。

SQLServer

検索条件のパターン照合

LIKE で使用される % や _ 以外に、LIKE 対象の文字列に [] と [^] が使用できます。これだけでも文字列作成が格段に楽です。

ただ、他の RDBMS と比べると『正規表現』としては一番未熟です。


MySQL

3.3.4.7 パターンマッチング

12.5.2 正規表現

LIKE では無く REGEXP を使用して、『select * from 社員マスタ where フリガナ REGEXP '.+オ.+'』みたいな書き方ができます。正規表現として使える演算子はそれほど多くはありませんが、逆に単純で使いやすいとは思います。

PostgreSQL

9.7.3. POSIX正規表現

正規表現をそのまま使える記法のようで、~( チルダ ) を使用して、where の中で検索できるようです。

例) select * from テーブル名 where 列名 ~ '[a-zA-Z]'

Oracle

REGEXP_LIKE

どうやら関数のようなものらしく、where の中で利用すると正規表現に一致する行が戻されるようです。
( 第三引数で、関数のパターン一致オプション )







posted by lightbox at 2018-09-01 01:31 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2014年10月14日


SQLServer の OPENDATASOURCE 関数による Excel の参照( Microsoft.Jet.OLEDB.4.0 と Microsoft.ACE.OLEDB.12.0 )

OPENDATASOURCE 関数を使用可能にするには、まず show advanced options を 1 にして、詳細オプションを可能に設定して反映するために、RECONFIGURE を実行します。その後、Ad Hoc Distributed Queries を 1 に設定してから RECONFIGURE を実行する必要があります
さらに、Excel 2007 以降の(拡張子 .xlsx)で、 Microsoft.ACE.OLEDB.12.0 プロバイダを利用する場合は、以下のコマンドを実行する必要があります

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
Microsoft ドキュメントsp_configure Microsoft のサンプルのように実行するとエラーになります。設定単位で GO しないとエラーになります。 一度設定すると設定は保持されます。SQL の実行前に毎回行う必要はありません 基本設定
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO


Microsoft.ACE.OLEDB.12.0用
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

それぞれのプロバイダでの実行
select * from
OPENDATASOURCE(
	'Microsoft.Jet.OLEDB.4.0',
	'Data Source="C:\user\data\商品.xls";Extended properties=Excel 8.0'
)...[Sheet1$]

select * from
OPENDATASOURCE(
	'Microsoft.ACE.OLEDB.12.0',
	'Data Source="C:\user\data\商品.xlsx";Extended properties=Excel 12.0'
)...[Sheet1$]


▼ ローカルの SQLServer(SQLExpress)へコマンドプロンプトから接続する一例
sqlcmd -U sa -P password -S .\SQLEXPRESS
sqlcmd を使った資料 SQLExpress 2005( および 2008 ) の接続設定 参考記事 Excel Import to SQL Server using Distributed Queries ( Microsoft.ACE.OLEDB.12.0 を使えるようにする為の処理が記述されていました ) 関連する記事 VBScript : ADO で Excel2007(Excel 2010、Excel 2013) にアクセスする( シートをテーブルとして読み込む ) ( VBScript から直接 Excel を DB として読む為の接続文字列と処理です )
posted by lightbox at 2014-10-14 21:47 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2014年07月14日


SQLServer(SQLExpress) : SQL学習用販売管理データとインポート用スクリプト



■ プログラム名
SQLExpress(SQLServer)用学習用販売管理データ作成

■ 概要

販売管理B.mdb に格納されている販売管理用のテーブルとビューを SQLExpress(SQLServer) にインポートします

■ 実行方法

1) データベースを前もって作成して下さい
2) hanbaiB_ss.vbs の strDb を作成したデータベース名に変更
3) strPwd を正しいパスワードに変更
4) エクスプローラから、hanbaiB_ss.vbs をダブルクリックして下さい

Crun()



' 別名 または SQLServer のインスタンス文字列を指定します
' インスタンス文字列は、PC名\インスタンス名 ですが、
' SQLExpress2005 ならば .\SQLEXPRESS で接続できるかもしれません
' ( 別名が確実です )
' 【以下URLは別名等接続設定参考ページ】
' http://lightbox.matrix.jp/ginpro/patio.cgi?mode=view&no=228
' NIGHT_TCP は別名定義です
strCon = "NIGHT_TCP"

' ▼ SQLExpress2012 / .\sqlexpress or localhost\sqlexpress or pcname\sqlexpress
strCon = ".\sqlexpress"

' データベース
' 事前に create database 文で作成する必要があります
' 上記URLを参考に、sqlcnmd を使って作成します
strDb = "lightbox"

' ユーザ
' 上記URLの設定で、sa が有効になります
strUser = "sa"

' パスワード
' 上記URLの設定で、パスワードを設定できます
strPwd = "passwordpassword"

' 使用する ODBC ドライバです
' SQLServer 2000 より後のバージョンですと、{SQL Native Client} も利用できます
' ODBC アドミニストレータで確認して下さい
strDriver = "{SQL Server}"
' strDriver = "{SQL Native Client}"
' ▼ SQLExpress2012
' strDriver = "{SQL Server Native Client 11.0}"


' ************************************************
' 基本設定
' ************************************************
' このスクリプトが存在するディレクトリを取得
strCurDir = WScript.ScriptFullName
strCurDir = Replace( strCurDir, WScript.ScriptName, "" )
strMdbPath = strCurDir & "販売管理B.mdb"

strMessage = "対象 MDB は " & strMdbPath & "です" & vbCrLf & vbCrLf

strMessage = strMessage & "↓SQLServerの環境です" & vbCrLf
strMessage = strMessage & "SERVER : " & strCon & vbCrLf
strMessage = strMessage & "DB : " & strDb & vbCrLf
strMessage = strMessage & "USER : " & strUser & vbCrLf
strMessage = strMessage & "PASS : " & strPwd & vbCrLf & vbCrLf

strMessage = strMessage & "既にテーブルが存在する場合はメッセージが出ません" & vbCrLf
strMessage = strMessage & "それ以外ではエラーメッセージが出ますが、問題ありません"
if vbCancel = MsgBox( strMessage, vbOkCancel ) then
	Wscript.Quit
end if

' ************************************************
' 処理用文字列設定
' ************************************************
' MDB の接続文字列
strConnectMdb = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strMdbPath & ";"

strConnectSQLServer = _
" in '' [ODBC;Driver="&strDriver&";SERVER=" & _
strCon & ";Database=" & strDb & ";UID=" & strUser & ";PWD=" & strPwd & "]"

strConnectSQLServer2 = _
"Provider=MSDASQL;Driver="&strDriver&";SERVER=" & _
strCon & ";Database=" & strDb & ";UID=" & strUser & ";PWD=" & strPwd

' ************************************************
' 初期処理
' ************************************************
Set Cn = CreateObject("ADODB.Connection")
Set Cn2 = CreateObject("ADODB.Connection")
Cn.Open strConnectMdb
Cn2.Open strConnectSQLServer2

' ************************************************
' コード名称マスタ
' ************************************************
Query = _
"create table コード名称マスタ (" & _
"	区分 INT" & _
"	,コード VARCHAR(10)" & _
"	,名称 NVARCHAR(50)" & _
"	,数値1 INT" & _
"	,数値2 INT" & _
"	,作成日 DATETIME" & _
"	,更新日 DATETIME" & _
"	,primary key(区分,コード)" & _
")"
Call SSTransfer( "コード名称マスタ", Query )

' ************************************************
' コントロールマスタ
' ************************************************
Query = _
"create table コントロールマスタ (" & _
"	キー VARCHAR(1)" & _
"	,売上日付 DATETIME" & _
"	,売上伝票 INT" & _
"	,primary key(キー)" & _
")"
Call SSTransfer( "コントロールマスタ", Query )

' ************************************************
' メッセージマスタ
' ************************************************
Query = _
"create table メッセージマスタ (" & _
"	コード VARCHAR(4)" & _
"	,メッセージ NVARCHAR(100)" & _
"	,primary key(コード)" & _
")"
Call SSTransfer( "メッセージマスタ", Query )

' ************************************************
' 取引データ
' ************************************************
Query = _
"create table 取引データ (" & _
"	取引区分 VARCHAR(2)" & _
"	,伝票番号 INT" & _
"	,行 INT" & _
"	,取引日付 DATETIME" & _
"	,取引先コード VARCHAR(4)" & _
"	,商品コード VARCHAR(4)" & _
"	,数量 INT" & _
"	,単価 INT" & _
"	,金額 INT" & _
"	,primary key(取引区分,伝票番号,行)" & _
")"
Call SSTransfer( "取引データ", Query )

' ************************************************
' 商品マスタ
' ************************************************
Query = _
"create table 商品マスタ (" & _
"	商品コード VARCHAR(4)" & _
"	,商品名 NVARCHAR(50)" & _
"	,在庫評価単価 INT" & _
"	,販売単価 INT" & _
"	,商品分類 VARCHAR(3)" & _
"	,商品区分 VARCHAR(1)" & _
"	,作成日 DATETIME" & _
"	,更新日 DATETIME" & _
"	,primary key(商品コード)" & _
")"
Call SSTransfer( "商品マスタ", Query )

' ************************************************
' 商品分類マスタ
' ************************************************
Query = _
"create table 商品分類マスタ (" & _
"	商品分類 VARCHAR(3)" & _
"	,名称 NVARCHAR(50)" & _
"	,作成日 DATETIME" & _
"	,更新日 DATETIME" & _
"	,primary key(商品分類)" & _
")"
Call SSTransfer( "商品分類マスタ", Query )

' ************************************************
' 得意先マスタ
' ************************************************
Query = _
"create table 得意先マスタ (" & _
"	得意先コード VARCHAR(4)" & _
"	,得意先名 NVARCHAR(50)" & _
"	,得意先区分 VARCHAR(1)" & _
"	,担当者 VARCHAR(4)" & _
"	,郵便番号 VARCHAR(7)" & _
"	,住所1 NVARCHAR(100)" & _
"	,住所2 NVARCHAR(100)" & _
"	,作成日 DATETIME" & _
"	,更新日 DATETIME" & _
"	,primary key(得意先コード)" & _
")"
Call SSTransfer( "得意先マスタ", Query )

' ************************************************
' 社員マスタ
' ************************************************
Query = _
"create table 社員マスタ (" & _
"	社員コード VARCHAR(4)" & _
"	,氏名 NVARCHAR(50)" & _
"	,フリガナ NVARCHAR(50)" & _
"	,所属 VARCHAR(4)" & _
"	,性別 INT" & _
"	,作成日 DATETIME" & _
"	,更新日 DATETIME" & _
"	,給与 INT" & _
"	,手当 INT" & _
"	,管理者 VARCHAR(4)" & _
"	,primary key(社員コード)" & _
")"
Call SSTransfer( "社員マスタ", Query )

' ************************************************
' 郵便番号マスタ
' ************************************************
Query = _
"create table 郵便番号マスタ (" & _
"	郵便番号 VARCHAR(7)" & _
"	,都道府県名カナ NVARCHAR(255)" & _
"	,市区町村名カナ NVARCHAR(255)" & _
"	,町域名カナ NVARCHAR(255)" & _
"	,都道府県名 NVARCHAR(255)" & _
"	,市区町村名 NVARCHAR(255)" & _
"	,町域名 NVARCHAR(255)" & _
")"
Call SSTransfer( "郵便番号マスタ", Query )

' ************************************************
' ビュー
' ************************************************
RunSS( "drop view V_商品一覧" )
Query = _
"create view V_商品一覧 as" & _
"	SELECT 商品マスタ.商品コード" & _
"	, 商品マスタ.商品名" & _
"	, 商品マスタ.販売単価" & _
"	, 商品分類マスタ.商品分類" & _
"	, 商品分類マスタ.名称 AS 分類名" & _
"	, 商品マスタ.商品区分" & _
"	, コード名称マスタ.名称 AS 区分名" & _
" from" & _
"	(商品マスタ LEFT JOIN 商品分類マスタ" & _
"	ON 商品マスタ.商品分類 = 商品分類マスタ.商品分類" & _
"	) LEFT JOIN コード名称マスタ" & _
"	ON 商品マスタ.商品区分 = コード名称マスタ.コード" & _
" where" & _
"	コード名称マスタ.区分 = 3"
RunSS( Query )

RunSS( "drop view V_売上日付" )
Query = _
"create view V_売上日付 as" & _
"	SELECT コントロールマスタ.売上日付" & _
"	FROM コントロールマスタ" & _
"	WHERE コントロールマスタ.キー = '1'"
RunSS( Query )

RunSS( "drop view V_得意先台帳" )
Query = _
"create view V_得意先台帳 as" & _
"	SELECT 取引データ.取引先コード" & _
"	, 得意先マスタ.得意先名" & _
"	, 取引データ.取引日付" & _
"	, 取引データ.取引区分" & _
"	, 取引データ.伝票番号" & _
"	, 取引データ.行" & _
"	, 取引データ.商品コード" & _
"	, 商品マスタ.商品名" & _
"	, 取引データ.数量" & _
"	, 取引データ.単価" & _
"	, 取引データ.金額" & _
" from" & _
"	(取引データ INNER JOIN 商品マスタ" & _
"	ON 取引データ.商品コード=商品マスタ.商品コード" & _
"	) INNER JOIN 得意先マスタ" & _
"	ON 取引データ.取引先コード=得意先マスタ.得意先コード" & _
" where" & _
"	取引データ.取引区分 = '10'"
RunSS( Query )

RunSS( "drop view V_社員一覧" )
Query = _
"create view V_社員一覧 as" & _
" select 社員コード" & _
"	,氏名" & _
"	,フリガナ" & _
"	,名称1.名称 as 性別" & _
"	,所属" & _
"	,名称2.名称 as 所属名" & _
" from 社員マスタ" & _
"	,コード名称マスタ 名称1" & _
"	,コード名称マスタ 名称2" & _
" where 性別 = 名称1.コード" & _
"   and 名称1.区分 = 1" & _
"   and 所属 = 名称2.コード" & _
"   and 名称2.区分 = 2"
RunSS( Query )

' ************************************************
' 終了
' ************************************************
Query = "drop table 転送用テーブル"
RunSS( Query )

Cn2.Close
Cn.Close

Wscript.Echo "処理が終了しました"

' ************************************************
' SQLServer 転送
' ************************************************
function SSTransfer( strTable, QueryCreate )

	Dim Query

	Query = "drop table " & strTable
	RunSS( Query )

	RunSS( QueryCreate )

	Query = "drop table 転送用テーブル"
	RunSS( Query )
	Query = "select * into 転送用テーブル" & strConnectSQLServer & _
	" from " & strTable
	RunMdb( Query )

	Query = "insert into " & strTable & _
	" select * from 転送用テーブル"
	RunSS( Query )

end function

' ************************************************
' MDB 実行
' ************************************************
function RunMdb( Query )

	on error resume next
	Cn.Execute Query
	if Err.Number <> 0then
		Wscript.Echo Err.Description
	end if
	on error goto 0

end function

' ************************************************
' SQLServer 実行
' ************************************************
function RunSS( Query )

	on error resume next
	Cn2.Execute Query
	if Err.Number <> 0 then
		if Query <> "drop table 転送用テーブル" then
			Wscript.Echo Err.Description
		end if
	end if
	on error goto 0

end function


' **********************************************************
' Cscript.exe で実行を強制
' ウィンドウをアクティブにし、最大化ウィンドウとして表示(3)
' Cscript.exe の実行終了後 pause で一時停止
' **********************************************************
Function Crun( )

	Dim str,WshShell

	str = WScript.FullName
	str = Right( str, 11 )
	str = Ucase( str )
	if str <> "CSCRIPT.EXE" then
		str = WScript.ScriptFullName

		Set WshShell = CreateObject( "WScript.Shell" )

		strParam = " "
		For I = 0 to Wscript.Arguments.Count - 1
			if instr(Wscript.Arguments(I), " ") < 1 then
				strParam = strParam & Wscript.Arguments(I) & " "
			else
				strParam = strParam & Dd(Wscript.Arguments(I)) & " "
			end if
		Next
		Call WshShell.Run( "cmd.exe /c cscript.exe " & Dd(str) & strParam & " & pause", 3 )
		WScript.Quit
	end if

End Function
' **********************************************************
' 文字列を " で囲む関数
' **********************************************************
Function Dd( strValue )

	Dd = """" & strValue & """"

End function

Crun は、Cscript.exe(コマンドプロンプト) で実行を強制する処理です。最後に pause で停止するようになっています。

エクスポートに、in 句を使っていますが、参照構文は以下のようになっています。
strConnectSQLServer = _
" in '' [ODBC;Driver="&strDriver&";SERVER=" & _
strCon & ";Database=" & strDb & ";UID=" & strUser & ";PWD=" & strPwd & "]"
これは、結構昔からある ODBC テーブルへのリンク用の構文を使用しています。ODBC テーブルを開く接続文字列は、以下の形式を持ちます。

"ODBC; connectstring"



posted by lightbox at 2014-07-14 14:55 | SQLExpress | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり