CREATE PROCEDURE ZXKS_GETSCORE
AS
BEGIN
BEGIN TRANSACTION;
CREATE TABLE temp_tablename
(
id INT PRIMARY KEY,
da VARCHAR(300),
fs INT
);
IF @@ERROR = 0 COMMIT TRANSACTION ELSE ROLLBACK TRANSACTION;
END
陷阱: 若參數為純數字(如學號 '123456'),直接 CREATE TABLE 123456 會語法錯誤,因 SQL Server 識別碼不能以數字開頭。
ALTER PROCEDURE createtable
@xuehao VARCHAR(20)
AS
BEGIN
DECLARE @tablename VARCHAR(30) = 'temp' + @xuehao; -- 加前綴確保合法識別碼
DECLARE @sql NVARCHAR(MAX) = N'
CREATE TABLE ' + QUOTENAME(@tablename) + N'
(
name NVARCHAR(15),
address NVARCHAR(50)
)';
EXEC sp_executesql @sql;
END
LEN(@tablename) <= 128(sysname 上限)。CREATE TABLE 權限,生產環境建議改用永久表 + 分區/檢視模擬多租戶,避免大量臨時表造成系統表膨脹。| 方案 | 優點 | 缺點 |
|---|---|---|
| 動態建表 | 隔離性強、結構彈性 | 系統表膨脹、統計資料維護成本高、權限管理複雜 |
| 單表 + TenantID 欄位 | 結構簡單、索引共享、易維護 | 需嚴格行級安全性 (RLS) 隔離資料 |
| 分區表 | 大資料量管理優、可獨立切換分區 | 分區鍵選擇關鍵、跨分區查詢需注意 |