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 中执行此操作的最简单方法是:

  • 一个列 if 类型INT IDENTITY,它通过在将行插入表中时生成序列号来自动处理标识符的数字部分

    CREATE TABLE dbo.tblBookInfo
     ( ID INT IDENTITY(1,1) NOT NULL,
        .... other columns here.....
     )
    
  • 一个计算的、持久的列,它结合了该字母数字前缀和标识列 - 类似于

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

您是否将主键定义在ID列上(这将是我的偏好——实际上没有必要将该前缀包含在每个索引条目中并多次存储)或者您是否真的必须将它放在列上,这取决于您AlphaNumID柱子。为了加快搜索速度,您也可以随时在 上放置一个单独的非聚集索引AlphaNumID

于 2013-01-13T10:03:33.433 回答
0

一种选择是使用由 2 列组成的连接主键,一个将保存 Alpha 字符串,另一个保存数字。然后,您的数字列可以使用 MarkD 建议的识别字段。

另一种选择是使用 varchar 字段并编写一个函数来确定字母数字字符串的数值。例如,你传入函数'LIBBOOKS',它返回一个字符串'LIBBOOKS- 然后你插入它。您可以在每次插入时触发的触发器中执行此操作。

在您的伪代码中,您将创建表和函数的开头混合以创建一个字母数字字符串。如果你完成了这条路径,照常创建你的表,然后编写一段代码来创建主键。最后将它们组合在一起,例如创建一个触发器来调用代码以创建主键或在您的应用程序中执行此操作等,具体取决于您的设计。

如果您要使用随机值,请记住在尝试插入之前检查是否唯一性。

于 2013-01-13T09:11:55.607 回答
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

应该注意的是,aCLUSTERED INDEX将建立在as 是通过 create table 工作时PRIMARY KEY的默认行为。这不是强制性的。SQL ServerSSMS GUI

真的很难猜出你想用你的代码实现什么。如果你能解释得更好一点,我们当然可以帮助你。

作为一个脚注PRIMARY KEYS,许多人认为使用整数类型数字 ( TINYINT, SMALLINT, INT, BIGINT) 作为您的PK. 当你这样做时,据说你正在创建一个人工主键。简而言之,它们是可管理的价值观,在平等方面INDEX表现良好且表现良好。JOINS

于 2013-01-13T09:04:13.093 回答