Upsert data from CSV to SQL Server table via command line on MacOS

Want to upsert data from CSV file to existing SQL Server table via command line on MacOS?

Using mssql-cmd, a Command-Line client for SQL Server, you can upsert(merge) CSV/TSV/TXT data to SQL Server table easily and fast.

Support Windows, Linux, and MacOS.

Download mssql-cmd MacOS version Download mssql-cmd

No need to install SQL Server client library.

Convenient to deploy to cloud. No need to run installation file, just uncompress and run, immediately.

Upsert/Merge CSV/TSV/TXT data into SQL Server table via command line on MacOS

1. In interactive mode:

mssql-cmd> load loadtype=upsert
      > updatekey=id
      > table=media_messages 
      > datafile=/Users/pan/Documents/media_messages.csv 
      > delimiter=, 
      > quote=" 
      > header=y;

2. In batch mode:

mssql-cmd dsn="pan:withdata@192.168.0.102/test" task=load loadtype=upsert updatekey=id table=media_messages datafile=/Users/pan/Documents/media_messages.csv delimiter=, quote=" header=y quit=y

“loadtype=upsert” will update row in table if “updatekey” id exists, or insert new row.

See parameters detail.


More about mssql-cmd – Command-Line client for SQL Server

Download mssql-cmd MacOS versionDownload mssql-cmd

CSV → SQL Server reference

Type mapping

Value kindin CSVin SQL Server
Int1234int
Bigint9007199254740993bigint
Decimal1234.56decimal(p,s)
Float1.234e+10float
Textquoted only when it contains a comma or a quotenvarchar(n)
Long textmust be quoted; line breaks inside force multi-line recordsnvarchar(max)
Date2026-09-18date
Datetime2026-09-18 14:30:00datetime2
Binarynot representable - base64 or hex stringvarbinary(max)
BooleanTRUE / FALSE, or 1 / 0 depending on the writerbit
JSONthe whole JSON value quoted, with internal quotes doublednvarchar(max)

Dialect differences

CSV is a file format and SQL Server is a database server, so the target has to be told the types the file never carried – the rows below are where the two sides diverge.

Propertyin CSVin SQL Server
port—1433
identifiersDouble quotes; a literal quote is doubled ("" )[square brackets]
row limit—SELECT TOP n
datesConventional text: 2026-09-18 or 2026-09-18 14:30:00datetime, datetime2, date, time
long text—nvarchar(max)
binaryNot supportedvarbinary(max)
separatorComma ","—
encodingNo declaration - UTF-8 works only with a BOM—
typingNone - every field is text—
shapeFlat table, optional header rowTables of rows and columns
ceilingNo formal limit; row count bounded by memory—

Command line

SideCommand
SQL Serverbcp
SQL Server (load)bcp, or BULK INSERT

Convert your data online, free

Free in-browser converters for CSV, Excel, JSON, XML and SQL: Withdata Online Data Conversion. Large files, batch conversion or scheduling? See the offline desktop apps, or browse all data conversion tools.


Posted

in

by