VBA를 사용하여 SQL 쿼리를 사용해야합니다. 쿼리에 대한 내 입력 값은 Excel 시트의 열에서 가져온 것입니다. 열에있는 모든 값을 가져와야하며 쿼리에 대한 입력으로 sqlserver에 전달해야합니다. 그러나 나는 답을 얻을 수 없었다. 유형 불일치가 오류로 표시됩니다. 누구든지 나를 도울 수 있습니다. 미리 감사드립니다
예를 들어 J 열에는 J1 = 25, j2 = 26, ....
stSQL = "SELECT * FROM prod..status where state in"
stSQL = stSQL & wsSheet.Range("J:J").Value
내 전체 코드는 다음과 같습니다.
Sub Add_Results_Of_ADO_Recordset()
'This was set up using Microsoft ActiveX Data Components version 2.8
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim stSQL As Variant
Dim wbBook As Workbook
Dim wsSheet As Worksheet
Dim rnStart As Range
Const stADO As String = "Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=prod;" & _
"Data Source=777777777V009D\YTR_MAIN4_T"
'where BI is SQL Database & AURDWDEV01 is SQL Server
Set wbBook = ActiveWorkbook
Set wsSheet = wbBook.Worksheets("sheet1")
With wsSheet
Set rnStart = .Range("A2")
End With
' My SQL Query
stSQL = "SELECT * FROM prod..status where state in"
stSQL = stSQL + wsSheet.Range("J:J").Value
Set cnt = New ADODB.Connection
With cnt
.CursorLocation = adUseClient
.Open stADO
.CommandTimeout = 0
Set rst = .Execute(stSQL)
End With
'Here we add the Recordset to the sheet from A1
rnStart.CopyFromRecordset rst
'Cleaning up.
rst.Close
cnt.Close
Set rst = Nothing
Set cnt = Nothing
End Sub
로 변경
stSQL = stSQL + " ('" + Replace(wsSheet.range("J:J").Value, "'", "") + ")"
그러나 SQL IN 문은 일반적으로 다음과 같이 사용됩니다.
state IN (25,26,28)
그러나 하나의 정수 값만 사용하는 경우이 방법을 사용하는 것이 좋습니다.
stSQL = "SELECT * FROM prod..status where state = "
stSQL = Val(wsSheet.range("J:J").Value)
in 문을 사용할 때 위험한 것이 한 가지 있습니다. 문장의 In 부분이 매우 길면 속도가 느려지고 더 큰 in 문으로 인해 altogeather가 충돌합니다.
이러한 상황에 대한 해결책은 in 값을 사용하여 임시 테이블을 만들고 (임시 테이블) 또는 임시 테이블을 기반으로 내부 조인을 수행하는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다