Sql-Server
SQL Server - 將密鑰從一個表複製到另一個表
在觸發器中,我使用 SELECT * INTO 創建了一個表。我以特定方式完成了該操作,以便創建表而不創建其中存在的標識列(讓我們命名此列 ID):
SELECT * INTO #ins FROM (SELECT * FROM inserted UNION ALL SELECT * FROM inserted WHERE 1 = 0) AS a
問題是新表(#ins)確實包含標識列(我想要它)但它沒有標記為主鍵(這是它在原始表中的樣子,我想保留它那樣)。
我想知道以下兩個中更容易的一個:
- 我如何從原始表中“讀取”主鍵並更改新表以將其添加到那裡?我希望這是通用的,所以假設 ID 列的名稱是未知的。
或(如果更容易)
- 是否有另一種方法可以從原始創建表#ins,保留列“ID”及其定義作為主鍵,但它不是 IDENTITY ?
編輯:好的,正如下面的評論中所述,我試圖實現的任務可以通過使用原始表中的主鍵以另一種方式完成。這使得上面的問題變得毫無意義。
對於像這樣永久重用的程式碼,您確實應該明確定義臨時表定義。如果您正在尋找一種簡單的方法來做到這一點,請參見下文。我還將提供有關您實際問題的資訊。
生成表定義的簡單方法:
- 在對象資源管理器中定位對象
- 右鍵點擊它並選擇“腳本->創建表->到SSMS視窗”
這應該會生成一個新的 SSMS 視窗,其中您選擇的表在那裡編寫腳本。根據您的選擇,您將在底部也有索引。
要使其成為臨時表,只需更改表的名稱即可。
刪除身份
找到標識列並刪除標識定義很可能是“IDENTITY(1,1)”。
例子:
CREATE TABLE #INS ( MyIdentityID INT NOT NULL PRIMARY KEY , MyValue VARCHAR(100) NOT NULL )
請注意,這是一種簡單直接的方法,可以直接回答您的問題。在觸發器中使用任何臨時表都會讓我產生懷疑,我想知道它背後的全部商業原因;可能存在更好的解決方案。