問題タブ [openrowset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - OpenRowSetコマンドを使用してExcelファイルからデータを読み取るストアドプロシージャ内のリンクサーバーでトランザクションを維持します
32 ビット SQL サーバー上にヘルパー DB があり、64 ビットのリンク サーバーを追加しました。
Jet.oledb ドライバーは 64 ビットの SQL サーバー コンピューターではサポートされていないため、Excel のインポート操作を実行することはできません。
すべて正常に動作していますが、リンク サーバー データベースで発生する挿入、更新、削除のトランザクションを維持する必要があります。
クライアント マシンとサーバー マシンで DTC サービスを構成しました。
ストアド プロシージャの開始時にトランザクション用に sp の上にブロックを追加しました。
BEGIN TRY SET XACT_ABORT ON BEGIN TRANSACTION
BEGIN TRY
XACT_ABORT をオンに設定
取引開始
- コード
- コード
エンドトライ
キャッチ開始
IF @@TRANCOUNT<>0 ロールバック トランザクション
--// Web サイトにログインするためのエラーを発生させます。
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
選択する
@ErrorMessage = ERROR_MESSAGE()、
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage, -- メッセージ テキスト。
しかし、それはエラーをスローします。
リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.Jet.OLEDB.4.0" が必要なトランザクション インターフェイスをサポートしていないため、要求された操作を実行できませんでした。
Excelシートからデータを読み取るために使用したOpenrowset関数でエラーがスローされます
つまり、
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 5.0;HDR=Yes; IMEX=1;Database=C:\test.xls','SELECT EmployeeID FROM [Sheet$]
where EmployeeID is not null ')
解決策が見つからないので、私は本当に行き詰まり、夢中になっています。
助けてくれてありがとう、
64-bit - 'Microsoft.ACE.OLEDB.12.0' 64x Sql サーバーと 86x Office?
エラー:
OLE DB プロバイダー 'Microsoft.ACE.OLEDB.12.0' は、プロバイダーがシングル スレッド アパートメント モードで実行するように構成されているため、分散クエリには使用できません。
そして、私が見ている答えは、64 ビット Sql Server と 32 ビット Office の間の競合です。Excel で openrowset を Sql Server に実行する方法はありますか?
sql - OPENROWSET は null を挿入します
私はこれを使用しています:
しかし、何らかの理由で、元のデータには間違いなく値が含まれているにもかかわらず、一部の値に null が含まれています (例: 'abc')。この奇妙な行動の理由は何でしょうか。ありがとう。
クリス
sql-server - ntext 列に格納された csv データに対するクエリの実行
CSV エクスポートの生のテキストと関連するタイムスタンプがデータベースに保存されているとします。ここでは、1 つのレコードが 1 つのエクスポートに相当します。
データベースへの2番目の接続を作成したり、データをファイルにエクスポートしたり、csvテキストドライバーを使用して再度開いたりせずに、そのフィールドに保存されたCSVファイルに対してクエリを実行する方法はありますか?
と仮定する:
1) ソリューション内のサーバーに物理ファイルを書き出すことはできません
2) OPENROWSET を使用してサーバーに 2 回目の接続を行うことはできません (サーバー、ユーザー名、およびパスワードが変更されます)。
3) 100% SQL ソリューションでなければならない - SP として実行できる必要がある
4) 一度に 1 つのレコードのみを操作する必要があること - ソリューションは、DB に保存されている複数の csv ファイルからの選択を考慮する必要はありません。
sql - t-sql、sql テーブルの内部結合スプレッドシート
データのテーブル (AmenityData) があり、このテーブルの列には E14 7 などの郵便セクターが含まれています
E14などの郵便地区のリストを含むExcelスプレッドシートもあります
AmenityData テーブルからすべてのデータを取得する必要があります。ここでは、郵便区域が郵便セクターに似ています (例: WHERE [PostalDistricts] + '%' LIKE [PostalSector])。
現在使用しているコードではエラーは発生しませんが、何も返されず、多くの結果が返されるはずです。
LIKE を使用してテーブルを結合できるかどうかさえわかりません。これまでに行ったことはありません。
sql-server - 32 ビットから 64 ビットへの移行、リンク サーバー (sp_addlinkedserver) を機能させる方法
32 ビット マシン (SQL サーバー 2005) で問題なく動作し、64 ビット用に更新する必要があるサンプル コードを次に示します。これはよくある問題ですが、修正方法を見つけることができませんでした。 !
私が試しているもう 1 つのことは、bcp ユーティリティを使用して、テーブルから .fmt ファイルを作成することです。これにより、読み取るファイルの形式を定義できます。
どんな助けでも大歓迎です!
sql - フォーマット ファイルを作成し、一括挿入のために Excel データを SQL Server 2008 にインポートするための BCP ユーティリティ
Excel 2003 データを SQL Server 2008 の SQL テーブルにインポートしようとしています。
リンク サーバーを追加しようとしましたが、ほとんど成功しませんでした。
現在、BCP ユーティリティを使用して OPENROWSET で BULK 挿入または BULK 操作を実行し、フォーマット ファイルを使用して Excel マッピングを取得する方法があるかどうかを確認しようとしています。
まず、Excel スプレッドシートの列とは異なる名前の列を持つテーブルのフォーマット ファイルを作成するにはどうすればよいですか? 次に、このフォーマット ファイルを使用して、たとえば C:\Folder1\Excel1.xsl にあるファイルからテーブル Table1 にデータをインポートする方法を教えてください。
ありがとうございました。
sql-server - リンク サーバーの追加/削除を強制し、構文を修正して Excel からテーブルにデータをインポートする
Sql サーバー 2008 R2 でリンク サーバーを作成しようとしていますが、Microsoft から「Office 2010 Access AD エンジンの 64 ビット バージョン」exe をダウンロードしようとしました。
残念ながら、このインストールを行う前に、リンクサーバーを追加しようとしましたが、失敗しました:
(別の方法がある場合は、この追加方法が正しくない場合はお知らせください!)
ダウンロードを行った後、このサーバーが既に存在するというメッセージが表示 されました。
ダウンロード後に同じ方法で「LinkedServer2」を追加しようとしました(Excel8.0の代わりにExcel5.0をパラメーターとして使用しました)。できます!ただし、削除しようとしましたが、この古いリンク サーバーはまだ存在しているようです。
それが実際にそこにあることを確認するために、私はこれを書きました:
およびプロパティの詳細:
私が何か間違ったことをしているのに気づいたら教えてください!「LinkedServer2」をドロップしてみましたが、うまくいきました!ただし、次のように同じリンクされた server1 を削除しようとしている場合でも:
私には失敗します、同じメッセージです! 「サーバー 'LinkedServer1' にはまだリモート ログインまたはリンクされたログインがあります。」
プロバイダー文字列を「Excel 5.0」として使用してリンク サーバーを追加しようとすると、正常に追加および削除されました。
別の更新: これは再び失敗しています: EXEC(' INSERT INTO Table1 SELECT col1, excel2col, excel3col, Replace(Replace(excel4col, ''"'', '''') FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0 '',''Excel 5.0;HDR=はい;データベース='+'D:\Folder\Excel1.xls'', [Sheet2$])')
エラー: OLE DB プロバイダー 'Microsoft.Jet.OLEDB.4.0' は、プロバイダーがシングル スレッド アパートメント モードで実行するように構成されているため、分散クエリに使用できません。構成を次のように変更しました。
performance - OpenRowSet、OpenQuery、OpenDataSource - パフォーマンスの点で優れている
これは議論の余地のある答えになる可能性がありますが、ローカルの Excel ファイルをローカルの SQL Server 2008 のテーブルにエクスポートする必要がある場合を探しています。
SQL Server 2008 での非常に大きなファイルのインポートについて、実行時間を確認して OpenRowSet/OpenQuery/OpenDataSource を比較する機会があった人はいますか?
3 つのオプションのいずれも使用でき、クエリはどこからでも実行できます。ただし、データ ソース (Excel) は SQL Server と同じサーバーにあります。
どんなポインタも役に立ちます。
sql-server-2005 - Openrowset および Microsoft.ACE.OLEDB.12.0 を介して csv から (異なる列に) インポートします。
.csv から 3 列のテーブルにデータをインポートする方法を明確にしたいと思います (以下の CR Ranking.csv を参照)。私のクエリ:
結果を1 つの列に出力します。
Openrowset を介して .csv のデータを3列に分割することは可能ですか? 私は Openrowset パラメータから何かを逃したと思います。おそらくそれは非常に簡単ですか?
はい: Office 2010 の 64 ビット ODBC ドライバーを使用して、.csv、.txt などのドライバーを取得しています。うまくいかないようです:
CRランキング.csv:
UPD 1:フォーマットファイルなし で行うことは可能ですか?
UPD 2:フォーマットファイルで作成しました-簡単でした。お邪魔してすみません。