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

SQL Server 動態建立資料表與加入唯一索引 T-SQL 範例

     編輯:SQL Server 2005

動態建立資料表

DECLARE @TableName NVARCHAR(128) = N'T_UserUid';  -- 表名變數
DECLARE @SQL NVARCHAR(MAX);

SET @SQL = N'
CREATE TABLE [dbo].[' + QUOTENAME(@TableName) + N'](
    [Cid] [int] IDENTITY(1,1) NOT NULL,
    [Uid] [nchar](32) COLLATE Chinese_PRC_CI_AS NULL,
    CONSTRAINT [PK_' + @TableName + N'] PRIMARY KEY CLUSTERED ([Cid] ASC)
        WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]';

EXEC sp_executesql @SQL;

為指定欄位加入唯一索引

DECLARE @IndexSQL NVARCHAR(MAX);
SET @IndexSQL = N'CREATE UNIQUE INDEX IX_' + @TableName + N'_Uid ON ' + QUOTENAME(@TableName) + N' (Uid)';
EXEC sp_executesql @IndexSQL;

語法解析

QUOTENAME()sp_executesqlCREATE UNIQUE INDEX
語法元素說明
自動加入方括號,防止 SQL 注入與特殊字元錯誤
參數化執行動態 SQL,優於 EXEC(),支援計畫重用
建立唯一非叢集索引,強制欄位值唯一(允許單一 NULL)

擴充應用:批次建立多張相同結構資料表

DECLARE @Prefix NVARCHAR(50) = N'T_User_';
DECLARE @Suffixes TABLE (Suffix NVARCHAR(20));
INSERT INTO @Suffixes VALUES ('UID'), ('EMAIL'), ('PHONE');

DECLARE @Sql NVARCHAR(MAX) = N'';
SELECT @Sql += N'
CREATE TABLE [dbo].[' + QUOTENAME(@Prefix + Suffix) + N'](
    [Cid] [int] IDENTITY(1,1) NOT NULL,
    [Value] [nchar](32) COLLATE Chinese_PRC_CI_AS NULL,
    CONSTRAINT [PK_' + @Prefix + Suffix + N'] PRIMARY KEY CLUSTERED ([Cid] ASC)
) ON [PRIMARY];
CREATE UNIQUE INDEX [IX_' + @Prefix + Suffix + N'_Value] ON [dbo].[' + QUOTENAME(@Prefix + Suffix) + N'] ([Value]);
'
FROM @Suffixes;

EXEC sp_executesql @Sql;

注意事項

  • 動態 SQL 需具備 CREATE TABLE、CREATE INDEX 權限
  • 叢集索引鍵預設為主鍵,若查詢模式不同可調整
  • 唯一索引建立前確認現有資料無重複值,否則會失敗
  • 生產環境建議透過變更管理流程執行,並先在測試環境驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved