3

テーブルにデータを入力するストアド プロシージャがあります。以下のコードに示すように、このテーブルには、主キー列でもある ID 列があります。

先頭の文字を含むように主キーを追加したいと思います: 例: ABC123。主キー列が INT データ型であるため、明らかにこれは不可能です。

そのため、追加の主キーを挿入できるように追加の列を作成しました。これは、新しい列を Null にする必要があり、UPDATE ステートメントを使用している場合を除いて機能します。

もっと良い方法があると何かが教えてくれます。

最初の挿入後に UPDATE を使用せずにこれを実行し、新しい列CategoryIDNot 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

最後に、これはテーブルがデータでどのように見えるかです:

ここに画像の説明を入力

あなたの知識に伝染していただきありがとうございます。:)

4

1 に答える 1

2

私の提案は、計算列を使用することです。これは、実行しようとしていることが冗長性をもたらすためです。下記参照:

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

または、GUID を含めるのに十分な大きさにして、GUID を挿入の列に入れ、後で更新します。

于 2013-05-13T03:27:13.063 に答える