sqlcmd命令執行大的SQL指令碼

2021-10-03 06:12:49 字數 2461 閱讀 9012

這兩天從伺服器匯出乙個150多mb的指令碼檔案,匯入到我本地的sqlserver資料庫中時,直接開啟執行提示記憶體不足的錯誤,於是google搜尋發現微軟針對此類情況有不少命令列工具,其中有一款sqlcmd 實用工具,官方文件位址為:sqlcmd 實用工具

sqlcmd 實用工具是乙個命令列實用工具,用於 transact-sql 語句和指令碼的臨時、互動執行以及自動執行 transact-sql 指令碼撰寫任務。 若要以互動方式使用 sqlcmd ,或要生成可使用 sqlcmd執行的指令碼檔案,使用者需要了解 transact-sql。 通常以下列方式使用 sqlcmd 實用工具

sqlcmd   

-a packet_size

-a (dedicated administrator connection)

-b (terminate batch job if there is an error)

-c batch_terminator

-c (trust the server certificate)

-d db_name

-e (echo input)

-e (use trusted connection)

-f codepage | i:codepage[,o:codepage]

| o:codepage[,i:codepage]

-g (enable column encryption)

-g (use azure active directory for authentication)

-h rows_per_header

-h workstation_name

-i input_file

-i (enable quoted identifiers)

-j (print raw error messages)

-k[1 | 2]

(remove or replace control characters)

-l login_timeout

-l[c]

(list servers, optional clean output)

-m error_level

-m multisubnet_failover

-n (encrypt connection)

-o output_file

-p[1]

(print statistics, optional colon format)

-p password

-q "cmdline query"

-q "cmdline query"

(and exit)

-r[0 | 1]

(msgs to stderr)

-r (use client regional settings)

-s col_separator

-s [protocol:]server[instance_name]

[,port]

-t query_timeout

-u (unicode output file)

-u login_id

-v var =

"value"

-v error_severity_level

-w column_width

-w (remove trailing spaces)

-x (disable variable substitution)

-x[1]

(disable commands, startup script, environment variables, optional exit)

-y variable_length_type_display_width

-y fixed_length_type_display_width

-z new_password

-z new_password (and exit)

-? (usage)

假如我有乙個input.sql的指令碼,超過100多mb,本地sqlserver伺服器位址為localhost,賬號為sa,密碼為123456,資料庫名稱為testdb,需要將指令碼匯入到testdb中,開啟終端,進入到input.sql指令碼所在目錄(比如說d:/test),執行如下命令:

sqlcmd -s localhost -u sa -p 123456 -d testdb -i input.sql
具體的引數描述可以參考官網:sqlcmd - 使用實用工具

當然在命令列中直接使用sqlcmd -?也可以檢視相關引數的用法,如下圖所示:

使用sqlcmd在批處理指令碼中執行SQL

使用sqlcmd可以在批處理指令碼中執行sql。雖然這個命令的引數很多,但幸運的是,我們不需要全部理解,在這裡簡要介紹以下幾個 e trusted connection 如果指定了 e就不需要指定使用者名稱密碼,當然指定了使用者名稱密碼就不用 e了 s server name instance na...

大Sql的切分執行

以前一直覺得sql應該減少傳遞次數,減少和資料庫的通訊,這樣可以提高效率。但現在發現,凡事都有個度的問題,由於業務需要一次性插入大概4000條資料,如果有併發操作,很容易就造成sql超時錯誤。於是就寫了乙個能夠拆分大sql執行的函式。執行大sql語句,傳入為stringbuilder以提高效率。pu...

SQL資料中執行cmd命令

在sql查詢分析器裡面是不能直接執行cmd命令的 但是sql給出了乙個介面 開啟高階設定 exec sp configure show advanced options 1 reconfigure 開啟xp cmdshell擴充套件儲存過程 exec sp configure xp cmdshell...