임시 테이블을 사용하여 SQL 가져오기<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP 11.2.1에서 저장 프로시저 및 임시 테이블을 사용하는 데 어려움을 겪고 있습니다.나는 단순히 돌아오지 않는다
db = 데이터베이스 연결 만들기("드라이버=SQL 서버;
서버=로컬서버\SQLEXPRESS;
데이터베이스=테스트"
);
SQL(db,
"
CREATE TABLE #Test( ID int)
INTO #테스트(ID) 삽입
값 (1), (2), (3), (4), (5)
선택하다 *
FROM #테스트
드롭 테이블 #테스트
",
":-("
);
데이터베이스 연결 종료(db);
이 문제는 한동안 저를 괴롭혔습니다.그것의 모양에서 SAS는 그것을 할 수 있으므로 ODBC와 관련된 문제라고 생각하지 않습니다.
Re: 임시 테이블을 사용하여 SQL 가져오기빈스,
감사해요.이전 ODBC 2.0 다운로드를 찾는 것이 이치에 맞습니까?나는 아직 많은 운이 없었다.
Re: 임시 테이블을 사용하여 SQL 가져오기내가 이해한 방식으로는 JMP 측에서 수정할 문제가 아닙니다.문제는 ODBC 3.0용 드라이버가 호출하는 방식에서 Microsoft 측에 있습니다.그들은 아마도 당신이 말한 대로 #Tables를 감지하려고 시도할 수 있지만 내 SQL이 허용되지 않는 방식으로 작성되었음을 알려주는 스크립트를 중단하고 싶지는 않을 것입니다.그래도 유용하다는 것을 알 수 있는 로그에 무언가를 전달합니다.
Re: 임시 테이블을 사용하여 SQL 가져오기각 쿼리 부분의 결과를 리터럴 JMP 데이터 테이블로 저장한 다음 JSL 내에서 수동으로 조인하는 것이 때때로 작동하는 것으로 나타났습니다.정말 시간을 잡아먹을 수 있지만 데이터 테이블 닫기를 실행할 때까지 결과를 활성 상태로 유지할 수 있습니다.
Re: 임시 테이블을 사용하여 SQL 가져오기설명해주셔서 감사합니다.그러나 나는 이것이 작동하는 방식이 마음에 들지 않습니다.나는해야한다 간단히 다른 응용 프로그램에서 제대로 실행되는 모든 쿼리를 수행할 수 있고 JMP/JSL 내에서 실행될 때 동일한 결과를 보거나 예상할 수 있습니다.
나는 이 스레드를 읽었으며 한 가지는 분명합니다. 모든 임시 테이블을 별도의 쿼리로 분할하는 논의된 해결 방법은 JSL 개발자에게 좋은 솔루션이 아닙니다.잘 작동하는 크고 오래된 쿼리가 있는데 이를 분리하는 데 문자 그대로 몇 시간이 걸립니다.그게 무슨 소용이야?이것이 어떻게 선호되는 방법입니까?또한 첫 번째 쿼리 분할 시도에서 JMP가 OID를 새 데이터 테이블에 로드하지 않는 것을 확인했습니다.따라서 이 쿼리를 분리할 수 있는지 잘 모르겠습니다.계속하면 빈 OID 열에 조인할 수 없습니다....SQL Server를 통해 이 동일한 쿼리 부분을 실행하면 내 열에 데이터가 있습니다.
저도 이 주제에 놀랐습니다. 어려운 찾기 위해 몇 번의 Google 검색이 필요했습니다.제한 사항은 JSL 매뉴얼에 명확하게 명시되어 있어야 하지만 처음으로 읽었습니다.저는 특별히 도움이 되지 않는 몇 가지 도우미 함수를 작성했습니다.이제 나는 그것이 시간 낭비라는 것을 깨닫고 있습니다.실제로 다른 응용 프로그램을 사용하여 csv에 쓰고 JMP에서 로드하도록 하는 것이 더 빠를 것입니다.이 소프트웨어는 저렴하지 않으므로 시간을 절약하기 위해 외부 앱이 필요하지 않고 Temp Tables/SQL이 JMP에서 작동할 것으로 기대합니다.
최소한 이 애플리케이션이 더 나은 알림을 제공할 것으로 기대합니다.JMP가 JSL 또는 "테이블 열기 > 고급" 플랫폼 내에서 임시 테이블 사용을 감지하는 경우 메시지일 수 있습니다. ~해야 한다 JMP가 작업을 처리할 수 없음을 알리기 위해 개발자에게 전송됩니다...?
이 스레드는 더 이상 활성화되지 않은 것 같습니다... SAS/JMP에서 이 문제를 해결할 계획입니까?
Re: 임시 테이블을 사용하여 SQL 가져오기당신 잘못이 아닐 수도 있습니다.JMP 12에는 저장 프로시저가 JMP에 어떤 행도 반환하지 않는 버그가 있습니다.몇 달 후에 나올 12.1 유지 관리 릴리스에서 수정될 것입니다.
업데이트 : 혼란스러웠습니다.행을 반환하지 않는 저장 프로시저에 관한 버그는 실제로 JMP 12에서 *아닙니다*. JMP 12.1 주기에서 도입 및 수정되었습니다.따라서 저장 프로시저 코드를 확인해야 할 수도 있습니다.행이 JMP로 반환되지 않는 단일 저장 프로시저 내에서 테이블을 만든 다음 선택하는 시나리오를 보았습니다.
에릭
Re: 임시 테이블을 사용하여 SQL 가져오기감사합니다 Brian, 방금 잘못 불렀나 봐요.
Re: 임시 테이블을 사용하여 SQL 가져오기안녕 빈스,
저장 프로시저의 문제를 인식하지 못합니다.SQL Server에 대한 좋은 예가 많지는 않지만 여기에서 작업할 수 있었습니다.인용이 큰 문제라는 것을 알고 있습니다.당신은 무엇을보고 있습니까?
브라이언
Re: 임시 테이블을 사용하여 SQL 가져오기정말 유익했던 Brian에게 감사합니다.
저장 프로시저도 실패할 수 있는 동일한 문제입니까?
Re: 임시 테이블을 사용하여 SQL 가져오기안녕 빈스,
답변이 늦어서 죄송합니다만, 이것에 대해 조사를 좀 해보고 싶었습니다.불행하게도 이것은 Microsoft SQL Server ODBC 드라이버(Native Client 및 Office 버전 모두)의 문제인 것 같습니다.SQL을 제출하면 테이블 생성이 자동으로 실패합니다.Mac용 Actual Technologies SQL Server 드라이버와 같은 드라이버를 사용하면 정상적으로 작동합니다.당시에는 ODBC 3.0을 적용하지 않았기 때문에 이전 버전의 JMP에서는 이것이 작동한다는 것을 알고 있습니다. 이 수준은 SQL Server 및 기타 데이터베이스 공급업체 내에서 블록 가져오기를 활용하는 데 필요합니다.블록 가져오기를 사용하면 큰 테이블을 훨씬 더 빠르게 검색할 수 있습니다.그러나 이로 인해 TEMP 테이블이 실패합니다.이 초기화는 JMP 시작 시 수행되므로 TEMP 테이블 사용을 감지하기 위해 SQL을 구문 분석할 수 있더라도 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 Driver][SQL Server]'#Test' 테이블이 없거나 권한이 없기 때문에 테이블을 삭제할 수 없습니다.
Re: 임시 테이블을 사용하여 SQL 가져오기각 SQL 문을 분리해 보십시오.
DB = 데이터베이스 연결 만들기 ( "드라이버=SQL 서버;
서버=로컬서버\SQLEXPRESS;
데이터베이스=테스트"
) ;
sql1 = "CREATE TABLE #Test(ID int)" ;
SQL 실행 ( DB , sql1 ) ;
SQL2 = "삽입 INTO #Test (ID) VALUES (1), (2), (3), (4), (5)" ;
SQL 실행 ( DB , SQL2 ) ;
SQL3 = "#테스트에서 * 선택" ;
dt = SQL 실행 ( DB , SQL3 , "#시험" ) ;
SQL4 = "드롭 테이블 #테스트" ;
SQL 실행 ( DB , SQL4 ) ;
데이터베이스 연결 닫기 ( DB ) ;