使用臨時表導入 SQL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我在 JMP 11.2.1 中使用存儲過程和臨時表時遇到了困難。我根本沒有回報
db = 創建數據庫連接("DRIVER=SQL Server;
服務器=本地服務器\SQLEXPRESS;
數據庫=測試”
);
執行 SQL(db,
"
創建表#Test(ID int)
插入 INTO #Test (ID)
值 (1), (2), (3), (4), (5)
選擇 *
來自#Test
刪除表#Test
",
":-("
);
關閉數據庫連接(db);
這個問題困擾了我一段時間。從外觀上看,SAS 可以做到,所以我認為這不是 ODBC 的問題。
Re: 使用臨時表導入 SQL文斯,
謝謝。尋找舊的 ODBC 2.0 下載是否有意義?我還沒有多少運氣。
Re: 使用臨時表導入 SQL按照我的理解,這不是 JMP 方面要解決的。問題出在微軟方面,因為他們的 ODBC 3.0 驅動程序調用它。正如你所說,他們可能會嘗試檢測#Tables,但我認為我不想中斷腳本來告訴我我的 SQL 是以不可接受的方式編寫的。向日誌傳遞一些東西我可以看到它很有用。
Re: 使用臨時表導入 SQL我注意到將每個查詢部分的結果保存為文字 JMP 數據表,然後在 JSL 中手動加入它們似乎有時會起作用。雖然它確實會佔用您的時間,但您將能夠保持結果處於活動狀態,直到您運行關閉數據表。
Re: 使用臨時表導入 SQL感謝您的解釋。但是,我不喜歡它的工作方式。我應該簡單地能夠接受在其他應用程序中運行良好的任何查詢,並在 JMP/JSL 中運行時看到/預期相同的結果。
我已經閱讀了這個線程並且有一點很清楚......討論的解決方法,將所有臨時表拆分為單獨的查詢,對於我們 JSL 開發人員來說不是一個好的解決方案。我有一個大的、較舊的查詢,它工作得很好,我需要幾個小時才能把它分開。那有什麼意義呢?這是首選方法嗎?我還注意到,在我的第一次查詢拆分嘗試中,JMP 沒有將 OID 加載到新的數據表中。所以我不確定我是否可以拆分這個查詢。如果我繼續,我將無法加入空白的 OID 列......當我通過 SQL Server 運行這個相同的查詢部分時,我的列確實有數據。
我也很驚訝這個話題是難的找到 - 它花了一些谷歌搜索。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 上沒有很多好的示例,但我能夠在這裡找到一個工作。我知道引用是一個大問題。你在看什麼?
布賴恩
Re: 使用臨時表導入 SQL謝謝布賴恩,這真的很豐富。
是否也是可能導致存儲過程失敗的問題?
Re: 使用臨時表導入 SQL嗨文斯,
對於延遲回复,我很抱歉,但我想對此進行一些調查。不幸的是,這似乎是 Microsoft SQL Server ODBC 驅動程序(本地客戶端和 Office 版本)的問題。當我們提交 SQL 時,表創建失敗。使用 Mac 的 Actual Technologies SQL Server 驅動程序之類的驅動程序,就可以成功。我知道在舊版本的 JMP 中這會起作用,因為當時我們沒有強制執行 ODBC 3.0。要在 SQL Server 和其他數據庫供應商中使用塊提取,需要此級別。塊提取使大表的檢索變得非常、非常快。然而,隨之而來的是 TEMP 表的失敗。這種初始化是在 JMP 啟動時完成的,因此實際上不可能對 TEMP 表選擇性地禁用它,即使我們可以解析 SQL 以檢測 TEMP 表的使用情況。
我希望我能給你更好的消息。
布萊恩·科科倫
JMP開發
Re: 使用臨時表導入 SQL那我就得聽從 SQL Server 專家的意見了。
Re: 使用臨時表導入 SQL沒有 # 就不是臨時表。
它在 SQL SERVER 中正常工作。
Re: 使用臨時表導入 SQL我不是 SQL 服務器專家——我主要使用 Oracle。似乎 SQL 服務器不喜歡您的表的名稱。嘗試測試而不是#Test。
您是否在 SQL Server 控制台中驗證了 SQL 命令?
Re: 使用臨時表導入 SQL看起來它會在 Execute 完成後立即擺脫它。
[Microsoft][ODBC SQL Server Driver][SQL Server]無效的對象名稱“#Test”。
[Microsoft][ODBC SQL Server Driver][SQL Server]無效的對象名稱“#Test”。
[Microsoft][ODBC SQL Server Driver][SQL Server]無法刪除表 '#Test',因為它不存在或您沒有權限。
Re: 使用臨時表導入 SQL嘗試分離出每個 SQL 語句:
D b =創建數據庫連接( “驅動程序=SQL服務器;
服務器=本地服務器\SQLEXPRESS;
數據庫=測試”
) ;
sql1 = “創建表#Test(ID int)” ;
執行 SQL ( D b , sql1 ) ;
sql2 = “插入 #Test (ID) 值 (1)、(2)、(3)、(4)、(5)” ;
執行 SQL ( D b , sql2 ) ;
sql3 = “從#Test中選擇*” ;
dt =執行 SQL ( D b , sql3 , “#測試” ) ;
sql4 = “刪除表#Test” ;
執行 SQL ( D b , sql4 ) ;
關閉數據庫連接( D b ) ;