Sql-Server

SQL Server - 將密鑰從一個表複製到另一個表

  • May 15, 2018

在觸發器中,我使用 SELECT * INTO 創建了一個表。我以特定方式完成了該操作,以便創建表而不創建其中存在的標識列(讓我們命名此列 ID):

SELECT * INTO #ins 
FROM (SELECT * FROM inserted 
     UNION ALL 
     SELECT * FROM inserted WHERE 1 = 0) AS a

問題是新表(#ins)確實包含標識列(我想要它)但它沒有標記為主鍵(這是它在原始表中的樣子,我想保留它那樣)。

我想知道以下兩個中更容易的一個:

  1. 我如何從原始表中“讀取”主鍵並更改新表以將其添加到那裡?我希望這是通用的,所以假設 ID 列的名稱是未知的。

或(如果更容易)

  1. 是否有另一種方法可以從原始創建表#ins,保留列“ID”及其定義作為主鍵,但它不是 IDENTITY ?

編輯:好的,正如下面的評論中所述,我試圖實現的任務可以通過使用原始表中的主鍵以另一種方式完成。這使得上面的問題變得毫無意義。

對於像這樣永久重用的程式碼,您確實應該明確定義臨時表定義。如果您正在尋找一種簡單的方法來做到這一點,請參見下文。我還將提供有關您實際問題的資訊。

生成表定義的簡單方法:

  • 在對象資源管理器中定位對象
  • 右鍵點擊它並選擇“腳本->創建表->到SSMS視窗”

這應該會生成一個新的 SSMS 視窗,其中您選擇的表在那裡編寫腳本。根據您的選擇,您將在底部也有索引。

要使其成為臨時表,只需更改表的名稱即可。

刪除身份

找到標識列並刪除標識定義很可能是“IDENTITY(1,1)”。

例子:

CREATE TABLE #INS
(
MyIdentityID INT NOT NULL PRIMARY KEY
, MyValue VARCHAR(100) NOT NULL
)

請注意,這是一種簡單直接的方法,可以直接回答您的問題。在觸發器中使用任何臨時表都會讓我產生懷疑,我想知道它背後的全部商業原因;可能存在更好的解決方案。

引用自:https://dba.stackexchange.com/questions/206756