은 내가 저장된 프로 시저를 포함하지 약간 더 복잡한 (비슷하지만) 문제를 가지고 있었다.
생각 누가 비슷한 위치에있는 사람을 찾았을 경우에 대비해 생각했습니다.
문제
SQL :
DECLARE @a (
Alpha VARCHAR(10),
Beta INT
);
INSERT @a VALUES
('A', 1)
DECLARE @b (
Gamma DATE,
Delta INT
);
INSERT @b VALUES
('2014-01-01', 1)
SELECT *
FROM @a a
JOIN @b b ON a.Beta = b.Delta
VBA :
Sub GetData()
Dim sSql
Dim oConnection As New ADODB.Connection
Dim oRecordSet As New ADODB.Recordset
Call oRecordSet.Open(sSqlQuery, oConnection, adOpenStatic, adLockReadOnly)
Call oConnection.Open("Provider=SQLOLEDB.1;Server=MyServer;Database=MyDB;Trusted_Connection=Yes;")
sSql = <as Above>
Call oRecordSet.Open(sSql, oConnection, adOpenStatic, adLockReadOnly)
If oRecordSet.RecordCount > 0 Then
' DO STUFF WITH DATA
End If
' Close objects
oConnection.Close
oRecordSet.Close
End Sub
솔루션
SQL_1
CREATE TABLE #a (
Alpha VARCHAR(10),
Beta INT
);
INSERT #a VALUES
('A', 1)
SQL_2
CREATE TABLE #b (
Gamma DATE,
Delta INT
);
INSERT #b VALUES
('2014-01-01', 1)
SQL_3
SELECT *
FROM #a a
JOIN #b b ON a.Beta = b.Delta
SQL_4
DROP TABLE #a;
SQL_5
DROP TABLE #b;
VBA
Sub GetData()
Dim sSql
Dim oConnection As New ADODB.Connection
Dim oRecordSet As New ADODB.Recordset
Call oConnection.Open("Provider=SQLOLEDB.1;Server=MyServer;Database=MyDB;Trusted_Connection=Yes;")
sSql = <SQL_1>
Call oConnection.Execute(sSql)
sSql = <SQL_2>
Call oConnection.Execute(sSql)
sSql = <SQL_3>
Call oRecordSet.Open(sSql, oConnection, adOpenStatic, adLockReadOnly)
If oRecordSet.RecordCount > 0 Then
' DO STUFF WITH DATA
End If
sSql = <SQL_4>
Call oConnection.Execute(sSql)
sSql = <SQL_5>
Call oConnection.Execute(sSql)
oConnection.Close
oRecordSet.Close
End Sub
설명
기본적으로 필자는 VBA가 초기 INSERT 후에 결과를 얻으려고하므로 개별 명령 (실행)으로 분리하고 원하는 데이터를 쿼리 할 때만 레코드 집합을 여는 것이 트릭을 수행하는 것으로 보입니다.
이것의 측면 문제는 임시 테이블을 사용해야한다는 것입니다. 임시 테이블을 사용하는 것이 좋습니다. 임시 테이블을 사용하는 것은 가변 테이블을 믿는 것처럼 라이브 DB이며 이전에는 사용하지 않았기 때문에 수행 할 수있는 권한이 있다는 것을 실제로 깨닫지 못했습니다. 두 번째 전화를 할 때쯤에 사라 졌을 것입니다. 당신은 내가 별도의 함수를 호출 각 명령이 있고 연결마다 폐쇄/개방 된 초기 (모든 일을 한 후에는 연결을 종료 확인
다른 일들이
희망을 임시 테이블을 삭제해야합니다) 그것에 대해 생각하지 않고 다른 사람을 도움 !
감사합니다. 나는 완전히 그것을 놓쳤다, 나는 보통 나의 sp에이 선을 포함시킨다. –