메뉴
실무 위키VBA 코드SQL_INSERT

SQL_INSERT

Sub

엑셀에서 SQL INSERT 쿼리를 실행해 데이터를 추가하는 VBA 명령문입니다.

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

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · 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

활용 예제

users 테이블에 이름·나이 값 추가
Dim ConnString As String
ConnString = "Server=database.windows.net,1433;User ID=xxx..."
SQL_INSERT ConnString, "users", "user_name, user_age", "오빠두, 38"

안내사항

엑셀 2007 이후 모든 버전에서 제공되는 ADO 라이브러리를 사용하므로 별도의 라이브러리나 드라이버를 설치하지 않아도 됩니다.
보조 명령문 SQL_CONN·SQL_EXECUTE·SQL_INSERT_STRING 이 함께 필요하며, 위 전체 코드에 모두 포함되어 있습니다.
값 목록과 필드 목록의 개수가 다르면 오류창을 출력하고 실행이 중단됩니다.
댓글 7
5 (4개 평가)
HSNA
HSNA 2022.11.18 16:07
혹시 입력값에 빈칸이 있을경우 어떻게 하나요?
오빠두엑셀
오빠두엑셀 작성자 2022.11.18 16:49
안녕하세요.
빈칸은 공백으로 입력하면 됩니다.
SQL_INSERT ConnString, "users", "user_name, user_age, user_level", "오빠두, ,100"
이런 식으로 입력해보세요.^^
그러면 null 허용시 null 그렇지 않으면 데이터형식에 따라 기본값이 입력됩니다.
감사합니다.
HSNA
HSNA 2022.11.22 10:38
감사합니다! 혹시 float 등 데이터 형식이 다르고 NULL값으로 그냥 입력하고 싶으면 어떻게 해야하나요?
오빠두엑셀
오빠두엑셀 작성자 2022.11.26 16:34
그럴 경우 해당 필드를 AN (Allow Null) 옵션을 활성화해보시길 바랍니다.
HSNA
HSNA 2022.11.18 17:01
    If sValue <> "CURRENT_TIMESTAMP" Then
if svalue = "" then
svalue = "''"
else
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
빈칸도 넣는부분은 이렇게 처리해서 해결했습니다.
리지
리지 2024.06.26 14:48
vba 에서 딱 필요했던 내용인데 감사합니다.
강민준🤗
강민준🤗 2024.08.11 13:04
좋은 자료 감사합니다.🙇‍♂️
스크랩 완료