一時テーブルを使用した ODBC データソース / SQL サーバーへの SQL クエリ親愛なるコミュニティの皆様
SQLサーバーで一時テーブルを利用するSQLスクリプトを構築しています。 以下の簡略化されたサンプル スクリプト (他の場所では正常に動作します) はエラーなしで実行されますが、データは返されません (つまり、JMP データ テーブルはポップアップしません)。
query= "
CREATE TABLE #tmpTable (ID int PRIMARY KEY NOT NULL, WaferNum int NOT NULL);
INSERT INTO #tmpTable (ID, WaferNum) (
SELECT
ID,
WaferNum
FROM WareHouse
);
SELECT * FROM #tmpTable;
DROP TABLE #tmpTable;
";
dbc = Create Database Connection(
"DSN=DatabaseName; ... ; UID=email@abc.com;"
);
Execute SQL (dbc, query);
close database connection(dbc);
私の次の反復は、以下のように実行を分割することでした。このトリックはどこかのスレッドで言及されました。
query1= "
CREATE TABLE #tmpTable (ID int PRIMARY KEY NOT NULL, WaferNum int NOT NULL);
INSERT INTO #tmpTable (ID, WaferNum) (
SELECT
ID,
WaferNum
FROM WareHouse
);
";
query2= "
SELECT * FROM #tmpTable
DROP TABLE #tmpTable;
";
query3= "
DROP TABLE #tmpTable;
";
dbc = Create Database Connection(
"DSN=DatabaseName; ... ; UID=email@abc.com;"
);
Execute SQL (dbc, query1);
Execute SQL (dbc, query2, "Table");
Execute SQL (dbc, query3);
close database connection(dbc);
JMP ログ ウィンドウが SQL サーバーからのメッセージをキャプチャするようになりました (返されたデータは含まれません)。無効なオブジェクト名 #tmpTableそしてテーブル #tmpTable は存在しないため削除できません。
JMP16を実行しています。 アドバイスをいただければ幸いです。
データアクセス品質およびプロセスエンジニアリングRe: 一時テーブルを使用した ODBC データソース / SQL サーバーへの SQL クエリSET NOCOUNT ON は確かに奇妙なオプションです。
うまくいってよかったです!
Re: 一時テーブルを使用した ODBC データソース / SQL サーバーへの SQL クエリこんにちは、ブライアンさん
あなたの解決策ノーカウントをオンに設定します。よく働く!!! 解決策がとても簡単だったことに驚いています。 私はさまざまなフォーラムやスレッドから解決策を探してかなりの時間を費やしましたが、誰もこれを提案しませんでした。
まことにありがとうございます;
ヤンネ
Re: 一時テーブルを使用した ODBC データソース / SQL サーバーへの SQL クエリジェーン、
最初の SQL を次のように変更すると、
query= "SET NOCOUNT ON;
CREATE TABLE #tmpTable (ID int PRIMARY KEY NOT NULL, WaferNum int NOT NULL);
INSERT INTO #tmpTable (ID, WaferNum) (
SELECT
ID,
WaferNum
FROM WareHouse
);
SELECT * FROM #tmpTable;
DROP TABLE #tmpTable;
";
dbc = Create Database Connection(
"DSN=DatabaseName; ... ; UID=email@abc.com;"
);
Execute SQL (dbc, query);
close database connection(dbc);
テーブルを JMP に取り込む必要があります。
(JSL で紛失した場合に備えて) 追加事項は次のとおりです。
ノーカウントをオンに設定します。
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-nocount-transact-sql?view=sql-server-ver15
-ブライアン
Re: 一時テーブルを使用した ODBC データソース / SQL サーバーへの SQL クエリこんにちはブライアン、古いスレッドを指摘してくれてありがとう。確かに非常に関連しています。 魅力的な問題です!
ラップトップ上で確立したテスト SQL Server のログを確認して、デバッグを行いました。 最初の注意点は、Excel でまったく同じ DNS 接続/ODBC ドライバーを使用して実行された同じクエリ (一時テーブルまたはテーブル変数を使用) は正常に動作しますが、JMP からは正常に動作しないことです。 サーバーへの受信トラフィックを調べるとき、Excel はクエリ文字列をそのまま送信します (例: SELECT * FROM テーブル) しかし、JMP からは、クエリは次の形式で届きます。
declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,NULL,N'SELECT * FROM Table'
select @p1
SQL ステートメントが ODBC ドライバーによって余分なものでラップされていると思います。 特にシステムストアドプロシージャsp_prepexec問題を引き起こしているようです。 引用符に関連している場合もあれば、そうでない場合もあります。その手順内で実際に何が起こっているのかを言うのは困難です。
はい、ODBC ドライバーの問題です。 ただし、知る限り、ODBC では直接実行も可能です。 これはExcelでも起こることだと思います。 これと同じことがJMPでも可能でしょうか? 以下に関連リンクをいくつか示します。
https://techcommunity.microsoft.com/t5/datacat/watch-out-those-prepared-sql-statements/ba-p/305074
https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/direct-execution-odbc?view=sql-server-ver15
Re: 一時テーブルを使用した ODBC データソース / SQL サーバーへの SQL クエリこんにちは、ジャネルさん
これが古い問題ではないことを願っています一時テーブルを使用した SQL のインポート。 フォーラムの他の誰かが、最近 JMP で SQL Server の一時テーブルを使用したことがあるかもしれません。
ブライアン・コーコラン
JMP開発