2013-01-13 24 views
1

我打算有'LIBBOOKS-1214'的主鍵,但我不能這樣做。我想要它,只要我輸入另一個信息,它就會生成它作爲我的主鍵。Alpha數字小學

這裏是我的代碼:

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的新手。

+1

我已將您的代碼放入代碼塊。如果你發佈的代碼有意義,這將是有益的。 – MarkD

+0

您的代碼不是有效的SQL。首先解決它。 SQL Server能夠使用類型爲「(N)VARCHAR(x)''的主鍵。 –

+0

您的隨機數字無法保證主鍵所需的唯一性。如果前綴總是LIBBOOKS,那麼確實需要將該部分存儲在數據庫中? – Ilion

回答

1

在SQL Server中要做到這一點最簡單的方法是將有:

  • 如果類型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上放置單獨的非聚簇索引。

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將在PRIMARY KEY建設成爲是默認行爲在SQL Server時通過創建表SSMS GUI工作。這不是強制性的。

真的很難猜測你試圖用你的代碼實現什麼。如果你能更好地解釋它,我們當然可以幫助你。

由於關於PRIMARY KEYS一個註腳,它被許多人認爲是最好的做法是使用一個整型數(TINYINTSMALLINTINTBIGINT)作爲PK。當你這樣做的時候,你會說要創建一個人造主鍵。簡而言之,他們是INDEX良好並且在JOINS上表現良好的可管理值。

0

一個選擇是使用由2列組成的連接主鍵,一個將保存字符串和另一個數字。然後你的數字列可以使用MarkD提出的Identify字段。

另一種選擇是使用varchar字段並編寫一個函數來確定字母數字字符串的數值。例如。你傳入函數'LIBBOOKS'並返回一個字符串'LIBBOOKS-然後你插入這個。您可以在每個插頁觸發的觸發器中執行此操作。

在你psudoe代碼中,你混合了create table和函數的開始來創建一個字母數字字符串。如果你完成這個路徑,就像正常一樣創建你的表,然後編寫一段代碼來創建主鍵。最後將它們拼在一起,例如創建一個觸發器來調用代碼來創建主鍵或在應用程序中執行此操作,具體取決於您的設計。

如果您打算使用隨機值,請記住在試圖插入它之前檢查唯一性。