임시 테이블이 있는 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 쿼리안녕하세요 Jannel님
이 오래된 문제가 아니기를 바랍니다. https://community.jmp.com/t5/Discussions/Importing-SQL-using-a-temp-table/mp/11760#M11264 . 포럼의 다른 누군가가 최근에 JMP와 함께 SQL Server Temp 테이블을 사용한 적이 있기를 바랍니다.
브라이언 코르코란
JMP 개발
Re: 임시 테이블이 있는 ODBC 데이터 소스/SQL 서버에 대한 SQL 쿼리안녕하세요 Brian, 이전 스레드를 지적해 주셔서 감사합니다. 실제로 매우 관련이 있습니다. 매력적인 문제!
랩톱에 설정한 테스트 SQL Server의 로그를 보고 디버깅을 했습니다. 첫 번째 참고 사항은 Excel에서 매우 동일한 DNS 연결/ODBC 드라이버를 사용하여 실행된 동일한 쿼리(임시 테이블 또는 테이블 변수 포함)가 제대로 작동하지만 JMP에서는 작동하지 않는다는 것입니다. 서버로 들어오는 트래픽을 조회할 때 Excel은 쿼리 문자열을 있는 그대로 보냅니다(예: 테이블에서 선택 * ) 그러나 JMP에서 쿼리는 다음 형식으로 도착합니다.
declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,NULL,N'SELECT * FROM Table'
select @p1
SQL 문은 ODBC 드라이버에 의해 추가 항목으로 포장되어 있다고 생각합니다. 특히 시스템 저장 프로시저 sp_prepexec 문제를 일으키는 것으로 보입니다. 따옴표와 관련되거나 관련되지 않을 수 있습니다. 그 절차 내에서 실제로 무슨 일이 일어나는지 말하기 어렵습니다.
네, 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에서 잃어버린 경우)는 다음과 같습니다.
번호 설정 켜기;
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-nocount-transact-sql?view=sql-server-ver15
-브라이언
Re: 임시 테이블이 있는 ODBC 데이터 소스/SQL 서버에 대한 SQL 쿼리안녕 브라이언,
당신의 솔루션 번호 설정 켜기; 잘 작동합니다!!! 솔루션이 얼마나 쉬운지 놀랐습니다. 나는 다양한 포럼과 스레드에서 솔루션을 찾는 데 상당한 시간을 보냈지만 아무도 이것을 제안하지 않았습니다.
감사합니다.
잔느