SQL Server 空間查詢操作指南
SQL Server 空間查詢操作指南前言在處理地理資訊系統(GIS)時,SQL Server 提供了一系列強大的空間查詢工具。本文將詳細介紹這些工具的使用方法,幫助您更有效地處理空間資料。 一、基本空間關係判斷1. 包含關係123456789-- A.STContains(B):判斷 A 是否包含 B-- 最常用於判斷點位是否在某個範圍內SELECT * FROM Points WHERE @polygon.STContains(point_geometry) = 1-- A.STWithin(B):判斷 A 是否在 B 內-- 與 STContains 相反,從點位角度判斷SELECT * FROM Points WHERE point_geometry.STWithin(@polygon) = 1 2. 相交關係12345678-- A.STIntersects(B):判斷 A 和 B 是否相交-- 適合判斷兩個範圍是否有重疊SELECT * FROM ZonesWHERE zone1_geometry.STIntersects(zone2_geometry) = 1--...
如何快速查詢資料庫檢視表(View)的欄位資訊
今天遇到長官要求提供所需的資料訊息,因為要求的資料欄位是由多個資料表組合而成,要一個一個去查看原始資料表相當費時。本文介紹如何用 SQL 直接查出檢視表的欄位資訊。 各資料庫系統的查詢方式Microsoft SQL Server1234567891011121314SELECT c.name AS ColumnName, t.name AS DataType, c.max_length AS MaxLength, c.precision AS NumericPrecision, c.scale AS NumericScale, c.is_nullable AS IsNullable, ISNULL(dc.definition, '') AS DefaultValueFROM sys.views vINNER JOIN sys.columns c ON v.object_id = c.object_idINNER JOIN sys.types t ON c.user_type_id = t.user_type_idLE...
SQL優化:處理百萬級資料表的結構修改
SQL優化:處理百萬級資料表的結構修改一張上百萬筆的資料表,直接下 ALTER TABLE 加個欄位,結果整張表被鎖住、線上查詢全部排隊等待、應用程式逾時。這是動大表時最常踩的雷。底下記錄一個我在宜蘭下水道專案實際用過的做法:不直接改原表,而是建一張新結構的表、分批把資料搬過去,再交換表名。 先講清楚一件事:這篇前半段的概念示意用 MySQL 語法,後半段的實戰程式碼是 SQL Server(T-SQL)。兩套資料庫在「建空表」和「換表名」這兩步的語法差很多,不能照抄互換,文中會逐一標明。 為什麼不直接 ALTER TABLE當資料表的記錄數量上到百萬、千萬級別,直接執行 ALTER TABLE 很可能撐很久甚至逾時。原因是不少結構變更會走「重建整張表」的路徑:資料庫要複製整張表的內容、期間對表加上 schema 修改鎖,其他查詢和寫入只能等。表越大,鎖的時間越長,線上服務就越可能受影響。 不同資料庫、不同版本對 online DDL 的支援程度不一樣,有些操作(例如某些情況下加欄位)其實能做到不重建表。但一旦碰到需要重建的變更,又不想冒鎖表風險,「自己控制節奏分批搬」就是個可控...
SQL中的CASE語法:強大而靈活的條件表達式
SQL中的CASE語法:強大而靈活的條件表達式CASE 語法讓查詢裡的條件判斷變得直接,根據不同情況回傳不同結果,不需要在應用層多繞一圈。 CASE語法的基本結構CASE 有兩種寫法:簡單 CASE 和搜索 CASE。 簡單CASE語法123456CASE 表達式 WHEN 值1 THEN 結果1 WHEN 值2 THEN 結果2 ... [ELSE 其他結果]END 搜索CASE語法123456CASE WHEN 條件1 THEN 結果1 WHEN 條件2 THEN 結果2 ... [ELSE 其他結果]END 簡單 CASE 是對單一表達式做等值比對,搜索 CASE 則每個 WHEN 都是獨立條件,能處理範圍、NULL、複合邏輯,彈性更大。 CASE語法的特點 靈活:條件邏輯可以很複雜,包含範圍、複合條件、NULL 判斷 可讀:比一堆巢狀 IF 或應用層後處理清楚 通用:SELECT、WHERE、ORDER BY、GROUP BY、UPDATE 都能用 實際應用場景例子1:根據成績分級1234567891011SELECT...
SQL查詢重複資料指南
資料表裡出現重複記錄,通常有幾個來源:ETL 流程沒做冪等性保護、應用層缺少唯一約束、或手動匯入時重複執行。本文介紹幾種查法與對應的效能取捨。 目錄 什麼是重複資料? 基礎查詢方法 進階查詢技巧 實務案例分析 效能優化建議 1. 什麼是重複資料?重複資料指的是在資料表中,某些欄位或欄位組合的值完全相同的記錄。例如,在員工資料表中,可能會出現相同姓名、生日和部門的多筆記錄。 2. 基礎查詢方法2.1 使用 GROUP BY 和 HAVING最基本的查詢重複資料方式是使用 GROUP BY 和 HAVING 子句: 1234SELECT 欄位1, 欄位2, COUNT(*) as 重複次數FROM 資料表GROUP BY 欄位1, 欄位2HAVING COUNT(*) > 1; 2.2 查看重複記錄的完整資訊若要查看重複記錄的所有欄位資訊,可以使用以下方式: 1234567891011WITH 重複資料 AS ( SELECT 欄位1, 欄位2 FROM 資料表 GROUP BY 欄位1, 欄位2 HAVING COUNT(*) > 1)SEL...
在 SQL Server 中尋找忘記的欄位位置
前言幾百張表的資料庫,欄位名稱記不住放在哪張表——一張張展開 SSMS 物件總管根本沒有效率。這篇整理幾種用系統視圖直接查的方式,從基礎模糊搜尋到跨資料庫都有,下次忘了直接拿來用。 基本搜尋方法最直接的做法是透過 sys.tables 和 sys.columns 這兩個系統視圖 JOIN 起來查: 1234567891011SELECT t.name AS TableName, c.name AS ColumnNameFROM sys.tables tINNER JOIN sys.columns c ON t.object_id = c.object_idWHERE c.name LIKE '%YourColumnName%'ORDER BY TableName, ColumnName; 使用說明 將 YourColumnName 替換成你要搜尋的欄位名稱 % 符號代表萬用字元,可以做模糊搜尋 查詢結果會顯示所有符合的資料表名稱及欄位名稱 進階搜尋技巧只知道欄位名稱還不夠,通常還要確認型別、長度、能不能為空。加...




