엑셀 SQL 쿼리 - egsel SQL kwoli

엑셀 SQL_INSERT 명령문 목차 바로가기

  1. 예제파일 다운로드
  2. 명령문 상세 설명
  3. SQL_INSERT 명령문 전체 코드
  4. 명령문 실전 사용예제
  5. 동작원리 단계별 알아보기

요약

엑셀에서 SQL INSERT 쿼리를 실행하여 데이터를 추가합니다.

명령문 구문

SQL_INSERT 연결문자열, 테이블이름, 필드목록, 값목록

사용된 인수 및 변수 알아보기
인수 설명
연결문자열
[String]
OLEDB(ADO.NET)로 연결할 연결문자열입니다.
테이블이름
[String]
DB에서 데이터를 추가할 테이블 이름입니다.
필드목록
[String]
테이블에서 값을 추가할 필드 목록입니다. 필드가 여러개일 경우 쉼표(,)로 구분하여 작성합니다.
예) "필드1,필드2,필드3,..."
값목록
[String]
필드에 추가할 값 목록입니다. 값이 여러개일 경우, 쉼표(,)로 구분하여 작성합니다. 값 목록의 개수는 필드 목록의 개수와 반드시 동일해야 하며, 그렇지 않을 경우 SQL_INSERT 함수는 오류창을 출력합니다.
예) "값1,값2,값3,..."

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.


상세 설명

SQL_INSERT 함수는 엑셀에서 SQL INSERT 쿼리를 실행하여 서버에 데이터를 추가하는 함수입니다.

엑셀 2007 이후 모든 버전에서 제공되는 ADO 라이브러리를 사용하므로, 별도의 라이브러리나 드라이버를 설치하지 않아도 명령문을 복사/붙여넣기하여 편리하게 사용할 수 있습니다.

본 함수의 인수로 테이블과 필드목록, 값목록을 작성하면, 아래와 같이 SQL INSERT 쿼리문이 작성됩니다. SQL INSERT 쿼리에 대한 자세한 설명은 관련 링크를 참고하세요.

INSERT INTO 테이블명 (값목록) VALUES (필드목록); 

실전 사용 예제

  1. 특정 서버 users 테이블의 "user_name, user_age" 로 값 추가하기

    Dim ConnString As String
    ConnString = "Server=database.windows.net,1433;User ID=xxx..."
    SQL_INSERT ConnString, "users", "user_name, user_age", "오빠두, 38"

엑셀 SQL 데이터 추가, SQL_INSERT 명령문 동작원리

SQL_INSERT 명령문 전체 코드

Sub SQL_INSERT(Connection As String, Table As String, Fields As String, Values As String)
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ SQL_INSERT 함수
'▶ SQL 서버에 연결 후, 특정 테이블에 새로운 행을 추가합니다.
'▶ 인수 설명
'_____________Connection      : SQL OLE DB로 연결할 연결문자열(Connection String)을 입력합니다.
'_____________Table                : DB 중 데이터를 Insert 할 테이블 이름입니다.
'_____________Fields                : 데이터를 추가할 대상 필드명입니다. 쉼표(,)로 구분하여 작성합니다.
'_____________Values               : 추가할 데이터입니다. 반드시 Fields와 짝이 되도록 입력합니다.
'▶ 사용 예제
'SQL_INSERT "Server=database.windows.net,1433;User ID=oppadu;Password=123;", "테이블명", "필드1,필드2,...", "값1, 값2, ..."
'■ 사용된 보조명령문
'SQL_CONN
'SQL_EXECUTE
'SQL_INSERT_STRING
'###############################################################
Dim DB As Object
Set DB = SQL_CONN(Connection)
SQL_EXECUTE DB, SQL_INSERT_STRING(Table, Fields, Values)
End Sub
 
Function SQL_INSERT_STRING(Table As String, Fields As String, Values As String) As String
Dim vFields As Variant: Dim vValues As Variant
Dim i As Long: Dim sValue As String
vFields = Split(Fields, ","): vValues = Split(Values, ",")
If UBound(vFields) <> UBound(vValues) Then
    MsgBox "INSERT 쿼리가 잘못 작성되었습니다." & vbNewLine & "Fields 와 Value의 개수가 다릅니다." & vbNewLine & _
    "Fields : " & Fields & vbNewLine & "Values : " & Values, vbCritical
    End
End If
 
SQL_INSERT_STRING = "INSERT INTO " & Table & "(" & Fields & ") VALUES ("
For i = LBound(vValues) To UBound(vValues)
    sValue = Trim(vValues(i))
    If sValue <> "CURRENT_TIMESTAMP" Then
        If Not (Left(sValue, 1) = "'" Or Left(sValue, 1) = "`") Then sValue = "'" & sValue
        If Not (Right(sValue, 1) = "'" Or Right(sValue, 1) = "`") Then sValue = sValue & "'"
    End If
    SQL_INSERT_STRING = SQL_INSERT_STRING & sValue & ","
Next
SQL_INSERT_STRING = Left(SQL_INSERT_STRING, Len(SQL_INSERT_STRING) - 1) & ");"
 
End Function
 
Sub SQL_EXECUTE(DB As Object, SQL_STRING As String)
On Error GoTo EH_CONN:
DB.Execute (SQL_STRING)
Exit Sub
EH_CONN:
    MsgBox "쿼리를 실행하는 도중 오류가 발생했습니다." & vbNewLine & _
                    "오류 번호 : " & Err.Number & vbNewLine & "오류 내용 : " & Err.Description, vbInformation
    End
End Sub
 
Function SQL_CONN(CONN_STRING As String) As Object
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ SQL_CONN
'▶ SQL 연결 문자열로 OLE DB 연결 후 ADODB 커넥션 개체를 반환합니다.
'▶ 인수 설명
'_____________Connection              : SQL OLE DB로 연결할 연결문자열(Connection String)을 입력합니다.
'▶ 사용 예제
'Dim DB As Object
'Set DB = SQL_CONN("Server=database.windows.net,1433;User ID=oppadu;Password=123;")
'###############################################################
 
Dim DB As Object
Set DB = CreateObject("ADODB.Connection")
 
If InStr(1, CONN_STRING, "Provider=", vbTextCompare) = 0 Then CONN_STRING = "Provider=SQLOLEDB;" & CONN_STRING
 
On Error GoTo EH_CONN:
DB.ConnectionTimeout = 3
DB.Open CONN_STRING
 
If DB.State = 1 Then
    Set SQL_CONN = DB
Else
    GoTo EH_CONN
End If
 
Set DB = Nothing
 
Exit Function
 
EH_CONN:
    MsgBox "서버에 연결할 수 없습니다." & vbNewLine & "인터넷 연결 또는 서버 상태를 확인하세요.", vbInformation
    Set DB = Nothing
    End
End Function

명령문 동작원리 단계별 알아보기

  1. 연결문자열을 참조하여 서버에 연결합니다.

    Dim DB As Object
    Set DB = SQL_CONN(Connection)

  2. 받아온 테이블, 필드목록, 값목록으로 INSERT 쿼리문을 작성합니다.

    SQL_INSERT_STRING(Table, Fields, Values)

  3. INSERT 쿼리를 실행하여 데이터를 추가합니다.

    SQL_EXECUTE DB, SQL_INSERT_STRING(Table, Fields, Values)