1

'LIBBOOKS-1214'で主キーを使用することを計画していましたが、実行できません。別の情報を入力するときはいつでも、それが主キーとして生成されるので、それが欲しいです。

これが私のコードです:

CREATE TABLE tblBookInfo
(
AccessionNumber NVARCHAR(MAX)
DECLARE @RandomNumber NVARCHAR(10);
DECLARE @AccNo NVARCHAR(MAX)
DECLARE @Upper INT;
DECLARE @Lower INT

SET @Lower = 1
SET @Upper = 9999

Select @RandomNumber = Round (((@Upper - @Lower -1)* RAND() + @Lower), 0)

SET @AccNo = 'LIBBOOKS' + @RandomNumber
SELECT @AccNo

Set AccessionNumber = @AccNo
SELECT AccessionNumber
)

ご協力ありがとうございました!とても有難い。私はまだSQL-Serverの初心者です。

4

3 に答える 3

1

SQL Serverでこれを行う最も簡単な方法は、次のようにすることです。

  • INT IDENTITY行がテーブルに挿入されたときに連続番号を生成することにより、識別子の数値部分を自動的に処理するタイプの場合の列

    CREATE TABLE dbo.tblBookInfo
     ( ID INT IDENTITY(1,1) NOT NULL,
        .... other columns here.....
     )
    
  • その英数字のプレフィックスとID列を組み合わせた計算された永続化された列-次のようなもの

    ALTER TABLE dbo.tblBookInfo
    ADD AlphaNumID AS 'LIBBOOKS-' + CAST(ID AS VARCHAR(5)) PERSISTED
    

主キーをID列に配置するように定義するか(それが私の好みです-すべてのインデックスエントリにそのプレフィックスを含めて何度も保存する必要はありません)、本当にそれを列に配置する必要があるかどうかはあなた次第です。AlphaNumID桁。検索を高速化するために、クラスター化されていない別のインデックスをいつでも配置することもできAlphaNumIDます。

于 2013-01-13T10:03:33.433 に答える
0

独自のテーブルを生成するテーブルを作成する場合は、次のPRIMARY KEYSようにする必要があります。

USE tempdb
GO

IF OBJECT_ID('tempdb.dbo.MyTable') IS NOT NULL DROP TABLE MyTable

CREATE TABLE MyTable
(
    BookID  INT IDENTITY(1,1) NOT NULL,
    Title   VARCHAR(50) NULL,
    CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED 
    (
        BookID ASC
    )
) ON [PRIMARY]

INSERT INTO MyTable (Title) VALUES
('SQL Syntax Explained'),
('Sensible Posting explained')

SELECT *
FROM MyTable

は、テーブルの作成を操作するときのデフォルトの動作でCLUSTERED INDEXあるasに基づいて構築されることに注意してください。必須ではありません。PRIMARY KEYSQL ServerSSMS GUI

コードで何を達成しようとしているのかを推測するのは非常に困難です。もう少し詳しく説明していただければ、きっとお手伝いできます。

に関する脚注として、PRIMARY KEYS整数型の数値(、、、、)を。として使用することが多くのベストプラクティスと見なされTINYINTています。これを行うと、人工主キーを作成していると言われます。一言で言えば、それらは、平等でうまく機能する管理可能な値です。SMALLINTINTBIGINTPKINDEXJOINS

于 2013-01-13T09:04:13.093 に答える
0

1つのオプションは、2つの列で構成される連結された主キーを使用することです。一方はアルファ文字列を保持し、もう一方は数値を保持します。次に、数値列は、MarkDによって提案されたIdentifyフィールドを使用できます。

もう1つのオプションは、varcharフィールドを使用して、英数字ストリングの数値を決定する関数を作成することです。たとえば、関数'LIBBOOKS'に渡すと、文字列' LIBBOOKS-が返され、これを挿入します。これは、各インサートで起動するトリガーで行うことができます。

疑似コードでは、作成テーブルと関数の開始を組み合わせて、英数字の文字列を作成します。このパスを実行した場合は、通常どおりテーブルを作成してから、コードを記述して主キーを作成します。最後に、一緒にpuytします。たとえば、デザインに応じて、コードを呼び出して主キーを作成するトリガーを作成するか、アプリケーションでこれを実行します。

ランダムな値を使用する場合は、挿入する前に、一意性があるかどうかを確認することを忘れないでください。

于 2013-01-13T09:11:55.607 に答える