将记录从一列插入同一范围或语句中的另一列

时间:2013-05-13 03:20:11

标签: sql sql-server tsql

我有一个填充表的存储过程:下面代码中显示的这个表有一个标识列,它也是主键列。

我想附加主键以包含前导字母:示例:ABC123。 显然这是不可能的,因为主键列是INT数据类型。

所以我创建了一个额外的列,以便我可以插入附加的主键。这工作除了我必须使新列Null和我使用UPDATE语句。

有些东西告诉我有更好的方法。

有没有办法在初始插入后不使用UPDATE而将新列 CategoryID 设为 Not Null

表格代码:

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

感谢您对您的知识具有感染力。 :)

1 个答案:

答案 0 :(得分:2)

我的建议是使用计算列,因为您尝试做的事情会引入冗余。见下文:

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

或者,将其大到足以包含GUID,将GUID放入插入的列中,然后再更新它。