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