Archive for the ‘SQL Server’ Category

SQL テーブルの IDENTITY をリセットする方法

2011年1月23日

テーブルのIDに IDENTITY をセットしている時に、テーブルの中身を消して、もう一度ID を0からふりなおしたい場合

image

TRUNCATE TABLE テーブル名

DBCC CHECKIDENT (テーブル名, RESEED , 0)

GO

補足

WHERE 句を伴わない DELETE FROM であれば、TRUNCATE TABLE  テーブル名 の方が高速で、使用するシステム リソースとトランザクション ログ リソースも少なく、おすすめ。

広告

Outlook 2010 より SQL へ直接 INSERT

2011年1月23日

Outlook 2010 から EXCELや、CSV への出力は、ファイルへのエクスポートで簡単にできるが、直接SQLに入れたい場合。

[Outlook のオプション]で、[開発]タブは規定値でオフになっているので、ここにチェックを入れる。

image

すると[開発]タブが表示される。

image

[マクロ]ボタンを押し、[マクロ]ダイアログより、たとえばOutlookToSqlマクロを作成する。

image

すると、Visual Basic のエディタが開く。[ツール]→[参照設定]を選択する。

image

[参照設定]より、”Microsoft ActiveX Data Objects 6.0 Library”を選択する。バージョンは環境によって異なるので最新のもので試してみればよいと思う。

image

SQL Server では、たとえばこんなテーブルを作っておく。

image

そして、次のマクロを実行する。

Sub OutlookToSql()
    Dim myOlapp As New Outlook.Application
   
    Dim myNameSpace As Outlook.NameSpace
    Dim myFolder As Outlook.Folder
   
    Dim 送信日時 As Date
    Dim 受信日時 As Date
    Dim 件名 As String
    Dim 内容 As String
   
    Set myNameSpace = myOlapp.GetNamespace(“MAPI”)
    Set myFolder = myNameSpace.Folders.Item(“Outlook”).Folders(“受信トレイ”)
   
    Dim adoCon As New ADODB.Connection
   
    adoCon.Open “Driver={SQL Server};” & _
      “server=192.168.11.9; database=test;Trusted_Connection=yes”
       
    Dim cmd As String
   
    With myFolder
        For i = 1 To .Items.Count
            件名 = .Items(i).Subject
            件名 = Replace(件名, “‘”, “””)
           
            送信日時 = .Items(i).SentOn
            受信日時 = .Items(i).ReceivedTime
            内容 = .Items(i).Body
            内容 = Replace(内容, “‘”, “””)
           
            cmd = “insert into Mail(Subject, SentOn, Received, Body) values (” & _
                “‘” & 件名 & “‘,” & _
                “‘” & 送信日時 & “‘,” & _
                “‘” & 受信日時 & “‘,” & _
                “‘” & 内容 & “‘” & _
                “)”
            adoCon.Execute cmd
        Next i
    End With
   
    adoCon.Close
   
    MsgBox “Done”
   
End Sub

結果はこんな感じ。

image

VBA でSQLのコマンドを文字列で生成しているので、SQL Injection 対策が必要なので注意。

Linked Server がうまくいかない・・・

2010年4月15日

EXCEL のオリジナルデータをSQLから直接扱いたい理由があって、Linked Server で手っ取り早くアクセスしようと思ったら、ハマり中。SQL Server 2008 + EXCEL 2007——————————–

EXCEL 2007 フォーマットの場合

EXEC sp_addlinkedserver
@server = N’ExcelDataSource’,
@srvproduct=N’ExcelData’,
@provider=N’Microsoft.ACE.OLEDB.12.0′,
@datasrc=N’E:\Users\uchukamen\Documents\test3.xlsx’,
@provstr=’EXCEL 12.0′ ;

コマンドは正常に完了しました。

SELECT *
   FROM ExcelDataSource…Sheet1  
GOリンク サーバー “ExcelDataSource” の OLE DB プロバイダ “Microsoft.ACE.OLEDB.12.0” から、メッセージ “エラーを特定できません” が返されました。
メッセージ 7303、レベル 16、状態 1、行 2
リンク サーバー “ExcelDataSource” の OLE DB プロバイダ “Microsoft.ACE.OLEDB.12.0” のデータ ソース オブジェクトを初期化できません。——————————–EXCEL 2000, 2003 フォーマットの場合EXEC sp_addlinkedserver ‘ExcelSource’,
   ‘Jet 4.0’,
   ‘Microsoft.Jet.OLEDB.4.0’,
   ‘E:\Users\uchukamen\Documents\test4.xls’,
   NULL,
   ‘Excel 8.0’
GOコマンドは正常に完了しました。SELECT *
   FROM ExcelSource…Sheet1
GOリンク サーバー “ExcelSource” の OLE DB プロバイダ “Microsoft.Jet.OLEDB.4.0” から、メッセージ “エラーを特定できません” が返されました。
メッセージ 7303、レベル 16、状態 1、行 2
リンク サーバー “ExcelSource” の OLE DB プロバイダ “Microsoft.Jet.OLEDB.4.0″ のデータ ソース オブジェクトを初期化できません。——————————–OpenDataSource もだめ。EXEC sp_configure ‘show advanced options’, 1
RECONFIGURE
EXEC sp_configure ‘Ad Hoc Distributed Queries’, 1
RECONFIGURE

この辺の設定はしている。

SELECT *
FROM OpenDataSource( ‘Microsoft.Jet.OLEDB.4.0’,
‘Data Source=”E:\Users\uchukamen\Documents\test4.xls”;
User ID=Admin;Password=;Extended properties=Excel 12.0’)…Sheet1リンク サーバー “(null)” の OLE DB プロバイダ “Microsoft.Jet.OLEDB.4.0” から、メッセージ “エラーを特定できません” が返されました。
メッセージ 7303、レベル 16、状態 1、行 2
リンク サーバー “(null)” の OLE DB プロバイダ “Microsoft.Jet.OLEDB.4.0” のデータ ソース オブジェクトを初期化できません。——————————–SQL 2005 のときはうまくいったのになぁ・・・http://uchukamen.com/SQL2000/LinkedServer/LinkedServer.htm何か忘れている????