首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 新特性實戰:刪除重複資料、隨機取樣、分頁與版本查詢

     編輯:關於SqlServer

前言

SQL Server 2005 引入了多項實用的 T-SQL 新特性,本文透過建立測試表與資料,示範如何利用新語法刪除重複列、隨機取樣、實現高效分頁,並查詢伺服器版本資訊。

建立測試環境

CREATE TABLE TestTable (
    Column1 VARCHAR(1),
    Column2 INT
);

INSERT INTO TestTable VALUES ('A', 1);
INSERT INTO TestTable VALUES ('A', 1); -- 重複
INSERT INTO TestTable VALUES ('A', 2);
INSERT INTO TestTable VALUES ('B', 1);
INSERT INTO TestTable VALUES ('B', 2);
INSERT INTO TestTable VALUES ('B', 2); -- 重複
INSERT INTO TestTable VALUES ('C', 2);

1. 使用 %%lockres%% 刪除重複列 (SQL Server 2005)

%%lockres%% 為內部虛擬欄位,代表資源鎖定標識,可用於識別唯一資料列。

DELETE FROM TestTable
WHERE TestTable.%%lockres%% NOT IN (
    SELECT MIN(b.%%lockres%%)
    FROM TestTable b
    GROUP BY b.Column1, b.Column2
);

2. 使用 %%physloc%% 刪除重複列 (SQL Server 2008+)

SQL Server 2008 引入 %%physloc%% 取代 %%lockres%%,用法相同。

DELETE FROM TestTable
WHERE TestTable.%%physloc%% NOT IN (
    SELECT MIN(b.%%physloc%%)
    FROM TestTable b
    GROUP BY b.Column1, b.Column2
);

3. 傳統主鍵法取得不重複記錄

若資料表有自增主鍵,可用 MIN(ID) 分組取得唯一列。

-- 加入主鍵
ALTER TABLE TestTable WITH NOCHECK ADD 
    ID INT IDENTITY(1,1) PRIMARY KEY;
GO

-- 取唯一記錄
SELECT MIN(ID) 
FROM TestTable 
GROUP BY Column1, Column2;
GO

4. 隨機取樣:ORDER BY NEWID()

SELECT TOP 3 * 
FROM TestTable 
ORDER BY NEWID();

每次執行會隨機返回 3 筆不同記錄,適合抽樣測試。

5. ROW_NUMBER() 實現高效分頁

SELECT * 
FROM (
    SELECT 
        ID, Column1, Column2,
        ROW_NUMBER() OVER (ORDER BY ID DESC) AS RowNum
    FROM TestTable
) AS a
WHERE RowNum BETWEEN 1 AND 3;

ROW_NUMBER() 配合 OVER 子句,是 SQL Server 2005 後分頁的標準寫法,效能遠優於舊式 TOP 巢狀查詢。

6. 查詢 SQL Server 版本資訊

SELECT 
    SERVERPROPERTY('ProductVersion') AS Version,
    SERVERPROPERTY('ProductLevel') AS Level,
    SERVERPROPERTY('Edition') AS Edition;

常見版本號對照:

  • RTM:2005.90.1399
  • SP1:2005.90.2047
  • SP2:2005.90.3042
  • SP3:2005.90.4035

RTM 版本資訊

SP3 版本資訊

總結

善用 SQL Server 2005 的新函數與虛擬欄位,能簡化重複資料清理、隨機抽樣與分頁查詢等常見任務,提升開發效率與查詢效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved