一時テーブルを使用した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クエリこんにちはジャネル、
私はそれがこの古い問題ではないことを願っていますhttps://community.jmp.com/t5/Discussions/Importing-SQL-using-a-temp-table/mp/11760#M11264 。 うまくいけば、フォーラムの他の誰かが最近JMPでSQLServerの一時テーブルを使用しました。
ブライアン・コーコラン
JMP開発
Re:一時テーブルを使用したODBCデータソース/ SQLサーバーへのSQLクエリこんにちはブライアン、古いスレッドを指してくれてありがとう。確かに非常に関連しています。 魅力的な問題!
ラップトップで確立したテストSQLServerのログを調べて、デバッグを行いました。 最初の注意点は、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問題を引き起こしているようです。 引用符に関連する場合と関連しない場合があります。その手順の中で実際に何が起こっているのかを言うのは難しい。
OK、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を次のように変更した場合:
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で紛失した場合)は次のとおりです。
NOCOUNTをオンに設定します。
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-nocount-transact-sql?view=sql-server-ver15
-ブライアン
Re:一時テーブルを使用したODBCデータソース/SQLサーバーへのSQLクエリこんにちはブライアン、
あなたの解決策NOCOUNTをオンに設定します。よく働く!!! 解決策がいかに簡単だったかに驚いています。 私はさまざまなフォーラムやスレッドから解決策を探すことにかなりの時間を費やしましたが、誰もこれを提案していません。
まことにありがとうございます;
ジャンヌ