一時テーブルを使用した SQL のインポート<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP 11.2.1 でストアド プロシージャと一時テーブルを使用するのに苦労しています。私は単に見返りがありません
db = データベース接続の作成("DRIVER=SQL Server;
サーバー=ローカルサーバー\SQLEXPRESS;
データベース=テスト"
);
SQL(db,
"
CREATE TABLE #Test ( ID int)
INTO #Test (ID) を挿入
値 (1)、(2)、(3)、(4)、(5)
選択する *
FROM #テスト
DROP TABLE #テスト
"、
":-("
);
データベース接続を閉じます(db);
この問題は、しばらくの間私を悩ませてきました。見た目はSASでできるので、ODBCの問題ではないと思います。
Re: 一時テーブルを使用して SQL をインポートするビンス、
ありがとう。古い ODBC 2.0 ダウンロードを探すのは理にかなっていますか?私はまだあまり運がありません。
Re: 一時テーブルを使用して SQL をインポートする私の理解では、これは JMP 側で修正する必要はありません。問題は Microsoft 側にあり、ODBC 3.0 用のドライバーがそれを呼び出す方法にあります。あなたが言ったように、#Tables を検出しようとする可能性がありますが、スクリプトを中断して、SQL が受け入れられない方法で記述されていることを通知したいとは思いません。ログに何かを渡すと、役立つことがわかりました。
Re: 一時テーブルを使用して SQL をインポートする各クエリ部分の結果をリテラル JMP データ テーブルとして保存し、JSL 内で手動で結合すると、うまくいく場合があることに気付きました。時間はかなりかかりますが、Close Data Table を実行するまで結果をアクティブに保つことができます。
Re: 一時テーブルを使用して SQL をインポートする説明ありがとう。しかし、私はこれがどのように機能するかが好きではありません。そうするべきです。単に他のアプリケーションで正常に実行される任意のクエリを取得し、JMP/JSL 内で実行したときに同じ結果を確認/期待できます。
私はこのスレッドを読みましたが、1 つのことは明らかです...すべての一時テーブルを個別のクエリに分割するという回避策は、JSL 開発者にとって良い解決策ではありません。問題なく動作する大規模で古いクエリがあり、それを分割するには文字通り何時間もかかります。そのポイントは何ですか?これはどのように好ましい方法ですか?また、最初のクエリ分割試行で、JMP が OID を新しいデータ テーブルにロードしていないことにも気付きました。したがって、このクエリを分割できるかどうかはよくわかりません。続行すると、空の OID 列に参加できなくなります....この同一のクエリ部分を SQL Server で実行すると、列にデータが含まれています。
この話題だったのもビックリした難しい見つけるには、いくつかの Google 検索が必要でした。制限事項は JSL マニュアルに明確に記載されているはずですが、これを読むのはこれが初めてです。私は具体的にいくつかのヘルパー関数を書きましたが、今ではあまり役に立ちません。時間の無駄だったと今になって気が付きました。別のアプリケーションを使用してcsvに書き込み、JMPにそれをロードさせる方が実際には高速です。このソフトウェアは安くはないので、時間を節約するために外部アプリを必要とする代わりに、Temp Tables/SQL が JMP で動作することを期待しています。
少なくとも、このアプリケーションの通知が改善されることを期待しています。JMP が JSL または「テーブルを開く > 詳細設定」プラットフォーム内で一時テーブルの使用を検出した場合、メッセージが表示される可能性があります。したほうがいいJMPが操作を処理できないことを開発者に通知するために送信されます...?
このスレッドはもうアクティブではないようです... SAS/JMP はこれを修正する予定はありますか?
Re: 一時テーブルを使用して SQL をインポートするそれはあなたのせいではないかもしれません。JMP 12 には、ストアド プロシージャが JMP に行を返さないというバグがあります (率直に言って、Brian がどのようにして行を動作させたのかはわかりません)。これは、数か月後にリリースされる 12.1 メンテナンス リリースで修正される予定です。
アップデート: 私は混乱していた。ストアド プロシージャが行を返さないというバグは、実際には JMP 12 にはありませんでした。JMP 12.1 サイクルで導入され、修正されました。そのため、ストアド プロシージャ コードを確認する必要がある場合があります。テーブルが作成され、行が JMP に返されない単一のストアド プロシージャ内から選択されるシナリオを見てきました。
エリック
Re: 一時テーブルを使用して SQL をインポートするありがとう、ブライアン、私はそれを間違って呼んでいたに違いない
Re: 一時テーブルを使用して SQL をインポートするこんにちはヴィンス、
ストアド プロシージャの問題を認識していません。SQL Server の良い例はあまりありませんが、ここで 1 つ動作させることができました。私は引用が大きな問題であることを知っています。あなたは何を見ていますか?
ブライアン
Re: 一時テーブルを使用して SQL をインポートする本当に有益だったブライアンに感謝します。
ストアド プロシージャも失敗する可能性があるのと同じ問題ですか?
Re: 一時テーブルを使用して SQL をインポートするこんにちはヴィンス、
返事が遅れて申し訳ありませんが、これについて調査したかったのです。残念ながら、これは Microsoft SQL Server ODBC ドライバー (ネイティブ クライアントと Office バージョンの両方) に問題があるようです。SQL を送信すると、テーブルの作成がサイレントに失敗します。Mac 用の Actual Technologies SQL Server ドライバーのようなドライバーを使用すると、これはうまくいきます。当時は ODBC 3.0 を強制していなかったので、古いバージョンの JMP でもこれが機能することはわかっています。このレベルは、SQL Server およびその他のデータベース ベンダー内でブロック フェッチを利用するために必要です。ブロック フェッチにより、大きなテーブルの取得が大幅に高速化されます。ただし、これには TEMP テーブルの障害が伴います。この初期化は JMP の起動時に行われるため、SQL を解析して TEMP テーブルの使用状況を検出できたとしても、TEMP テーブルに対して選択的に無効にすることは実際には不可能です。
より良いニュースをお届けできれば幸いです。
ブライアン・コーコラン
JMP開発
Re: 一時テーブルを使用して SQL をインポートするこれについては、SQL Server の専門家に任せる必要があります。
Re: 一時テーブルを使用して SQL をインポートする# がなければ、一時テーブルにはなりません。
SQL SERVER で正しく動作します。
Re: 一時テーブルを使用して SQL をインポートする私は SQL サーバーの専門家ではありません。主に Oracle を使用しています。SQL サーバーがテーブルの名前を気に入らないようです。#Test の代わりに Test を試してください。
SQL Server コンソールで SQL コマンドを検証しましたか?
Re: 一時テーブルを使用して SQL をインポートする実行が終了するとすぐにそれを取り除くように見えます。
[Microsoft][ODBC SQL Server ドライバー][SQL Server]オブジェクト名 '#Test' が無効です。
[Microsoft][ODBC SQL Server ドライバー][SQL Server]オブジェクト名 '#Test' が無効です。
[Microsoft][ODBC SQL Server ドライバー][SQL Server]テーブル '#Test' を削除できません。テーブルが存在しないか、権限がないためです。
Re: 一時テーブルを使用して SQL をインポートする各 SQL ステートメントを分離してみてください。
デシベル=データベース接続の作成( "DRIVER=SQL サーバー;
サーバー=ローカルサーバー\SQLEXPRESS;
データベース=テスト"
) ;
sql1 = "CREATE TABLE #Test (ID int)" ;
SQL を実行する(デシベル、 sql1 ) ;
sql2 = "INSERT INTO #Test (ID) VALUES (1), (2), (3), (4), (5)" ;
SQL を実行する(デシベル、 sql2 ) ;
sql3 = 「SELECT * FROM #テスト」 ;
dt = SQL を実行する(デシベル、 sql3 、 "#テスト" ) ;
sql4 = 「DROP TABLE #テスト」 ;
SQL を実行する(デシベル、 sql4 ) ;
データベース接続を閉じる(デシベル) ;