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 Server의 메시지를 캡처합니다(반환된 데이터 없음). 잘못된 개체 이름 #tmpTable 그리고 #tmpTable 테이블이 존재하지 않으므로 삭제할 수 없습니다.
저는 JMP16을 실행하고 있습니다. 어떤 조언이라도 높이 평가됩니다.
데이터 접근품질 및 프로세스 엔지니어링Re: ODBC 데이터 소스에 대한 SQL 쿼리/임시 테이블이 있는 SQL 서버SET NOCOUNT ON은 실제로 이상한 옵션입니다.
문제가 해결되어서 다행입니다!
Re: ODBC 데이터 소스에 대한 SQL 쿼리/임시 테이블이 있는 SQL 서버안녕 브라이언,
귀하의 솔루션 NOCOUNT를 ON으로 설정하세요. 잘 작동합니다!!! 솔루션이 얼마나 쉬운지 놀랐습니다. 나는 다양한 포럼과 스레드에서 솔루션을 찾아보며 꽤 오랜 시간을 보냈지만 누구도 이 솔루션을 제안하지 않았습니다.
정말 감사합니다.
잔느
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에서 손실된 경우)은 다음과 같습니다.
NOCOUNT를 ON으로 설정하세요.
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-nocount-transact-sql?view=sql-server-ver15
-브라이언
Re: ODBC 데이터 소스에 대한 SQL 쿼리/임시 테이블이 있는 SQL 서버안녕하세요 브라이언, 오래된 스레드를 지적해 주셔서 감사합니다. 실제로 매우 관련이 있습니다. 매력적인 이슈!
랩톱에 설정한 테스트 SQL Server의 로그를 확인하여 디버깅을 수행했습니다. 첫 번째 참고 사항은 Excel에서 매우 동일한 DNS 연결/ODBC 드라이버를 사용하여 실행된 동일한 쿼리(임시 테이블 또는 테이블 변수 포함)가 제대로 작동하지만 JMP에서는 작동하지 않는다는 것입니다. 서버로 들어오는 트래픽을 볼 때 Excel은 쿼리 문자열을 있는 그대로 보냅니다(예: SELECT * FROM 테이블 ) 그러나 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 가져오기 . 포럼의 다른 누군가가 최근에 JMP와 함께 SQL Server 임시 테이블을 사용해 왔기를 바랍니다.
브라이언 코코란
JMP 개발