動連接 Azure SQL Database 的 CRUD 實戰(zhàn))
示例工程數(shù)據(jù)庫教程后端【免費下載鏈接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge項目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples點擊查看免費下載本篇以 sql-server-samples 倉庫中 Windows 版 Ruby 連接樣例 為主體完整講解在 Windows 客戶端上搭建 Ruby 運行環(huán)境RubyInstaller、DevKit、TinyTDS gem并連接 Azure SQL Database 的全過程并逐行剖析配套源碼 sample_ruby_win.rb 中的連接、SELECT、會話配置與 INSERT ... OUTPUT 寫法。讀完后你可以按文檔步驟獨立復(fù)現(xiàn)樣例運行并理解使用 TinyTDS 訪問 Azure SQL 時必須設(shè)置的八條 ANSI 會話選項及其原因。樣例定位一份 Windows 端的 Ruby CRUD 連接教程該樣例屬于倉庫 Ruby 教程系列samples/tutorials/ruby中面向 Windows 操作系統(tǒng)的部分官方 README 明確了它的基本屬性適用對象Applies toSQL Server 2016或更高版本、Azure SQL Database、Azure SQL Data Warehouse工作負載WorkloadCRUD增刪改查中的讀取與寫入編程語言Ruby樣例作者Andrea Lam。樣例目錄結(jié)構(gòu)非常精簡僅含文檔與源碼兩個文件samples/tutorials/ruby/windows/README.md本指南環(huán)境準備、運行步驟、TinyTDS 使用注意事項samples/tutorials/ruby/windows/sample_ruby_win.rb實際執(zhí)行的 Ruby 腳本。同系列還有 Linuxsample_ruby_linux.rb與 macOSsample_ruby_mac.rb兩個版本三者的業(yè)務(wù)邏輯代碼完全一致差異僅在于各平臺的環(huán)境搭建方式本文聚焦 Windows 版跨平臺差異會在文末單獨對比。軟件前置條件在 Windows 上安裝 Ruby、DevKit 與 tiny_tds按照 README 的“Before you begin”部分Windows 客戶端需要準備三項軟件組件。1. 安裝 RubyRubyInstaller 2.1.x從 RubyInstaller 官方下載頁獲取對應(yīng)架構(gòu)的 2.1.x 安裝包例如 64 位機器選擇 Ruby 2.1.6 (x64)雙擊啟動安裝程序選擇語言并同意條款。關(guān)鍵的安裝設(shè)置項有兩個復(fù)選框務(wù)必都勾選Add Ruby executables to your PATH將 ruby 可執(zhí)行文件加入系統(tǒng) PATH否則后續(xù)無法直接用ruby命令A(yù)ssociate .rb and .rbw files with this Ruby installation將 .rb / .rbw 文件關(guān)聯(lián)到本 Ruby 安裝便于直接雙擊運行腳本。2. 安裝并初始化 DevKitDevKit 是 RubyInstaller 的配套開發(fā)工具包為編譯原生擴展如 TinyTDS 這類包含 C 代碼的 gem提供 MSVC 構(gòu)建環(huán)境從 RubyInstaller 下載頁下載 DevKit雙擊壓縮包選擇解壓位置點擊 ... 按鈕選擇C:\DevKit該文件夾通常需要先點擊 “Make New Folder” 手動創(chuàng)建點擊 “OK” 和 “Extract” 完成解壓打開命令提示符Command Prompt依次執(zhí)行chdir C:\DevKit ruby dk.rb init ruby dk.rb install其中dk.rb init用于讓 DevKit 識別已安裝的 Ruby 解釋器dk.rb install則把 DevKit 與所識別的 Ruby 建立關(guān)聯(lián)。3. 安裝 tiny_tds gemTinyTDS 是 Ruby 生態(tài)中基于 FreeTDS 庫的輕量級 SQL Server 驅(qū)動gem 名為tiny_tds。進入C:\DevKit目錄后在終端執(zhí)行g(shù)em inst tiny_tds --preREADME 特意使用--pre參數(shù)安裝預(yù)發(fā)布版本這是該樣例時代針對 Azure SQL Database 兼容性給出的安裝方式。Azure 側(cè)前置條件準備 AdventureWorks 樣例數(shù)據(jù)庫該 Ruby 樣例依賴 AdventureWorks 樣例數(shù)據(jù)庫——腳本中查詢的SalesLT.Customer表與寫入的SalesLT.Product表均來自 AdventureWorks 的SalesLTSales Light輕量級模式。如果賬號下還沒有 AdventureWorks按 Azure SQL Database 的標準流程創(chuàng)建即可倉庫內(nèi) samples/databases/adventure-works 目錄下還附帶了完整的 AdventureWorks OLTP 安裝腳本instawdb.sql與數(shù)據(jù) CSV 文件其中的instawdb.sql就定義了SalesLT.Product、SalesLT.Customer等表結(jié)構(gòu)SellStartDate等列名可在其中檢索驗證可直接用于在自建 SQL Server 上復(fù)現(xiàn)同一套樣例。運行樣例修改連接串并執(zhí)行腳本運行步驟共兩步README “Run this sample” 部分在命令提示符中打開 sample_ruby_win.rb將連接串中的用戶名、密碼、主機名替換為自己的憑據(jù)見下一節(jié)對連接串各字段的說明在終端執(zhí)行ruby sample_ruby_win.rb源碼剖析sample_ruby_win.rb 的完整執(zhí)行流程下面結(jié)合源碼逐段說明該腳本做了什么以下行號均指向 sample_ruby_win.rb。建立連接TinyTds::Client 的五個連接參數(shù)#Using the TinyTDS driver require tiny_tds require date #Connect to your database. #Replace server name, username, and password with your credentials client TinyTds::Client.new username: usernameservername, password: password, host: servername, port: 1433, database: databasenamesample_ruby_win.rbTinyTds::Client.new接收五個關(guān)鍵字參數(shù)與 Azure SQL Database 的 SQL 身份認證模型一一對應(yīng)參數(shù)示例值含義usernameusernameservernameSQL 登錄名格式為用戶服務(wù)器這是 Azure SQL Database 使用 SQL 身份認證的標準寫法passwordpassword登錄密碼hostservername邏輯服務(wù)器地址Azure SQL 上即servername.database.chinacloudapi.cn形式的全限定域名port1433TDS 協(xié)議默認端口Azure SQL Database 固定使用該端口databasedatabasename目標數(shù)據(jù)庫名本例為 AdventureWorks 對應(yīng)的庫注意源碼頂部#Replace server name, username, and password with your credentials的注釋提示usernameservername、password、servername、databasename均為占位符運行前必須替換。SELECT讀取 SalesLT.Customer 前十行#SELECT #Execute a simple select statement. results client.execute(SELECT TOP 10 Title, FirstName, LastName from SalesLT.Customer) #Print results of select. results.each do |row| puts row endsample_ruby_win.rbclient.execute是 TinyTDS 的核心執(zhí)行入口返回一個可逐行遍歷的結(jié)果集。這里執(zhí)行SELECT TOP 10 Title, FirstName, LastName FROM SalesLT.Customer讀取 AdventureWorks 客戶表的前 10 條記錄并以哈希形式打印每一行用于驗證連接與讀路徑正常。先設(shè)置會話選項再執(zhí)行 INSERT#INSERT #Make sure you have followed the recommended settings for using TinyTDS with Azure results client.execute(SET ANSI_NULLS ON) results client.execute(SET CURSOR_CLOSE_ON_COMMIT OFF) results client.execute(SET ANSI_NULL_DFLT_ON ON) results client.execute(SET IMPLICIT_TRANSACTIONS OFF) results client.execute(SET ANSI_PADDING ON) results client.execute(SET QUOTED_IDENTIFIER ON) results client.execute(SET ANSI_WARNINGS ON) results client.execute(SET CONCAT_NULL_YIELDS_NULL ON)sample_ruby_win.rbREADME 中“Additional notes for using TinyTDS with Azure”一節(jié)明確建議使用 TinyTDS 連接 Azure 時應(yīng)預(yù)先設(shè)置如下八條會話選項這也是腳本中這 8 行代碼的由來SET ANSI_NULLS ON SET CURSOR_CLOSE_ON_COMMIT OFF SET ANSI_NULL_DFLT_ON ON SET IMPLICIT_TRANSACTIONS OFF SET ANSI_PADDING ON SET QUOTED_IDENTIFIER ON SET ANSI_WARNINGS ON SET CONCAT_NULL_YIELDS_NULL ON這些選項統(tǒng)一了 TDS 驅(qū)動的 ANSI 語義與 SQL Server 的默認行為例如ANSI_NULLS決定 NULL 比較語義、ANSI_PADDING決定定長字符列是否補齊、QUOTED_IDENTIFIER決定括號標識符的解析方式等是 FreeTDS 系驅(qū)動訪問 Azure SQL 的推薦實踐。在代碼層面即“在執(zhí)行查詢之前逐條client.execute這些 SET 語句”。需要指出一個文檔與源碼的細微差異README 中給出的 Ruby 示例片段里client.execute(SET QUOTED_IDENTIFIER ON)多了一個引號筆誤而同系列的 Linux 版 sample_ruby_linux.rb 與 Windows 版源碼均寫為正確的client.execute(SET QUOTED_IDENTIFIER ON)。以源碼文件中的寫法為準即可。日期格式化與 INSERT ... OUTPUT 回插主鍵#Configure date format to align with SQL Server datetime format t Time.now curr_date t.strftime(%Y-%m-%d %H:%M:%S.%L) #Execute an insert statement results client.execute(INSERT SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate) OUTPUT INSERTED.ProductID VALUES (SQL Server Express New, SQLEXPRESS New, 0, 0, #{curr_date} )) #Print the ID of the inserted row. results.each do |row| puts row endsample_ruby_win.rb這段寫入了三個值得注意的細節(jié)日期格式對齊用 Ruby 的strftime(%Y-%m-%d %H:%M:%S.%L)把當(dāng)前時間格式化為YYYY-MM-DD HH:MM:SS.mmm正好是 SQL Serverdatetime類型的標準字面量格式含毫秒避免依賴隱式轉(zhuǎn)換INSERT ... OUTPUT語句尾部OUTPUT INSERTED.ProductID讓 INSERT 直接把新行自增生成的ProductID作為結(jié)果集返回腳本隨后遍歷打印——這是不回讀數(shù)據(jù)庫、直接獲取插入主鍵的慣用手法目標列插入SalesLT.Product的Name、ProductNumber、StandardCost、ListPrice、SellStartDate五列列結(jié)構(gòu)與 AdventureWorks 安裝腳本 instawdb.sql 中的表定義一致。綜合來看整個樣例完成的就是 README “Sample details” 所概括的行為連接 AdventureWorks 數(shù)據(jù)庫執(zhí)行一條 SELECT 和一條 INSERT驗證 TinyTDS 在 Windows 上對 Azure SQL 的完整 CRUD讀寫鏈路??缙脚_對照同一樣例在 Linux / macOS 上只換環(huán)境Windows 版獨有的復(fù)雜度在于 DevKitC 編譯器工具鏈的搭建。對照同目錄下的 Linux 版 README 與 macOS 版 README可看出各平臺前置條件的差異平臺Ruby 獲取方式FreeTDS 來源tiny_tds 安裝Windows本文RubyInstaller 2.1.xx64 DevKit由 tiny_tds gem 攜帶gem inst tiny_tds --preUbuntu LinuxRVMrvm install 2.3.1sudo apt-get install freetds-dev freetds-bingem install tiny_tdsmacOS系統(tǒng)自帶 / Homebrew 環(huán)境brew install FreeTDSgem install tiny_tds三端的業(yè)務(wù)腳本SELECT、八條 SET、日期格式化、INSERT ... OUTPUT逐行相同說明該樣例的數(shù)據(jù)庫邏輯與平臺無關(guān)可整體遷移運行命令僅文件名不同ruby sample_ruby_win.rb/ruby sample_ruby_linux.rb/ruby sample_ruby_mac.rb。免責(zé)聲明按原文檔 Disclaimers 部分本腳本與本指南版權(quán)歸 Microsoft Corporation僅作為樣例提供不屬于任何 Azure 服務(wù)不受任何 SLA 或其他 Azure 相關(guān)協(xié)議約束按“現(xiàn)狀”提供、不附帶明示或默示擔(dān)保使用腳本前請先自行熟悉其內(nèi)容。參考文件Windows 樣例指南本文主體文檔samples/tutorials/ruby/windows/README.mdWindows 樣例源碼samples/tutorials/ruby/windows/sample_ruby_win.rbRuby 教程系列總覽samples/tutorials/ruby/README.mdLinux 對照樣例samples/tutorials/ruby/linux/README.md、samples/tutorials/ruby/linux/sample_ruby_linux.rbmacOS 對照樣例samples/tutorials/ruby/mac/README.md、samples/tutorials/ruby/mac/sample_ruby_mac.rbAdventureWorks OLTP 安裝腳本樣例所依賴的表結(jié)構(gòu)來源samples/databases/adventure-works/oltp-install-script/instawdb.sql贊分享示例工程數(shù)據(jù)庫教程后端【免費下載鏈接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge項目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples點擊查看免費下載相關(guān)推薦使用 Ruby (TinyTDS) 在 Ubuntu Linux 上連接 SQL Server 與 Azure SQL Database 實戰(zhàn)指南使用 Ruby TinyTDS 在 Ubuntu Linux 上連接 SQL Server 與 Azure SQL Database 實戰(zhàn)指南 本指南基于 sq示例工程數(shù)據(jù)庫教程后端sql-server-samples在 macOS 上用 Ruby 連接 Azure SQL 數(shù)據(jù)庫 —— TinyTDS 樣例實戰(zhàn)解析sql server samples在 macOS 上用 Ruby 連接 Azure SQL 數(shù)據(jù)庫 —— TinyTDS 樣例實戰(zhàn)解析 本文基于官方樣例庫示例工程數(shù)據(jù)庫教程后端使用 T-SQL 自動生成 JSON CRUD 存儲過程sql-server-samples code-generator 實戰(zhàn)指南使用 T SQL 自動生成 JSON CRUD 存儲過程sql server samples code generator 實戰(zhàn)指南 本文圍繞 sql ser示例工程數(shù)據(jù)庫教程后端上一篇1Fichier Download Manager 實戰(zhàn)指南從入門到精通下一篇Bootbox.js插件開發(fā)如何擴展自定義對話框功能創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考