2013-05-13 25 views
3

我有一個填充表的存儲過程:如下面的代碼所示,此表具有也是主鍵列的標識列。將記錄從一列插入到同一作用域或語句中的另一列

我想追加主鍵包含前導字母:例如:ABC123。 顯然這是不可能的,因爲主鍵列是INT數據類型。

所以我創建了一個額外的列,以便我可以插入附加的主鍵。這工作除了我必須使新列Null,我正在使用UPDATE語句。

東西告訴我有更好的方法。

有沒有辦法,我可以做到這一點沒有初始插入後使用UPDATE,並有新列類別ID非空

表編號:

CREATE TABLE [dbo].[Registration] (
    [SystemID] INT   IDENTITY (100035891, 1) NOT NULL, 
    [CategoryID] CHAR (13) NULL, 
    [FName]  VARCHAR (30) NOT NULL, 
    [LName]  VARCHAR (30) NOT NULL, 
    [MInit]  CHAR (1)  NULL, 
    PRIMARY KEY CLUSTERED ([SystemID] ASC) 
); 

存儲過程:

CREATE PROCEDURE [dbo].[uspInsertRegistration] 

@FName VARCHAR(30), 
@LName VARCHAR(30), 
@MInit CHAR(1), 
@CategoryID CHAR(13), 
@SystemID int OUTPUT 

AS 
BEGIN 
SET NOCOUNT ON 
DECLARE @ErrCode int 

INSERT INTO [dbo].[Registration] ([FName],[LName],[MInit]) 
    VALUES (@FName, @LName, @MInit) 

SELECT @ErrCode = @@ERROR, @SystemID = SCOPE_IDENTITY() 

UPDATE [dbo].[Registration] 
SET CategoryID = 'ABC'+ CAST(SystemID AS CHAR) 

SET NOCOUNT OFF 
RETURN @ErrCode 
END 

最後這是表看起來像數據:

enter image description here

感謝您成爲傳染與你的知識。 :)

蓋伊

回答

2

我的建議是使用一個計算列,因爲你正在試圖做什麼引入了冗餘。請看下圖:

http://msdn.microsoft.com/en-us/library/ms191250%28v=sql.105%29.aspx

或者,使其大到足以容納一個GUID,把一個GUID插入插入欄,然後事後更新。

+0

大衛你好:計算列工作的很棒!在你提到它之前我沒有聽說過它。我簡單地更新了我的表格: [CategoryID] AS('abc'+ CAST(SystemID AS CHAR))PERSISTED 再次非常感謝您的建議和美妙的想法。 Guy – Asynchronous 2013-05-13 03:52:33

相關問題