2013-08-12 46 views
2

如何自動生成表格列中的特定值?我想自動生成列中的值,如"WD-2010-0001","WD-2010-0002", "WD-2010-0003"等。誰能幫忙?如何在列中自動生成特定值?

由於提前

+2

這些值從哪裏來?這些值是表中其他列中的值的組合嗎? –

+2

「WD」和「2015,2010」的值是多少? – Nithesh

+3

通常最好是在單獨的列中保留單獨的部分(這些部分會有所不同,但方式不同),然後使用構造格式化值的計算列(或視圖)。如果這是合適的,你能告訴我們這些規則是如何變化的? WD-'是否總是固定在那些角色上? –

回答

0

這一點很難說什麼你真的想這樣做,但它可能是像

select 
    'WD-20' + 
    right('00' + cast(cast(rand() * 15 as int) + 1 as nvarchar(2)), 2) + '-' + 
    '000' + cast(cast(rand() * 9 as int) + 1 as nvarchar(1)) 
+0

情景是,每次我在表中插入新記錄時,都會生成「WD-2010-0001」,「WD-2010-0002」。我想要使​​用這些自動生成的值作爲id像在常規情況下「ID」列生成值1,2,3等.... –

0

我覺得OP的意思是不如何生成特定的值,但是如何自動填充列。我認爲使用觸發器是正確的選擇。喜歡的東西:

CREATE TRIGGER [Add_WD] on dbo.MyTable AFTER INSERT AS 
UPDATE dbo.MyTable 
SET WD = '' -- you can put your value generation logic here. 
FROM Inserted i 
WHERE dbo.MyTable.PrimaryId = i.PrimaryId 
0

這可能會幫助你

DECLARE @String varchar(20)='WD-2010-0001' 

SELECT 'WD-2010-'+ 
     REPLICATE('0', 4 - LEN(REVERSE(CAST(REVERSE(LEFT(REVERSE(@String), 
        CHARINDEX('-', REVERSE(@String)) -1)) AS INT)+1)))+ 
     CAST(CAST(REVERSE(left(REVERSE(@String), CHARINDEX('-', 
       REVERSE(@String)) -1)) AS INT)+1 AS VARCHAR(4)) 

column name

1

正如我在評論說,我會存放不同的零件來替換@String然後分別使用計算格式化柱。

create table T (
    _ID int IDENTITY(20100001,1) not null, 
    ID as 'WD-' + LEFT(CONVERT(varchar(10),_ID),4) + '-' + SUBSTRING(CONVERT(varchar(10),_ID),5,10), 
    ColumnA int not null 
) 
go 
insert into T(ColumnA) values (10) 
go 
select ID,ColumnA from T 

主要生產::

ID     ColumnA 
------------------ ----------- 
WD-2010-0001  10 

而接下來的插入會WD-2010-0002

1

computed column

IF OBJECT_ID('dbo.test2') IS NOT NULL DROP TABLE dbo.test2 
CREATE TABLE dbo.test2 
(
    Id int IDENTITY, 
    colLikeWd varchar(2) DEFAULT 'WD', 
    colLikeYear varchar(4) DEFAULT '2010', 
    colLikeAuto AS colLikeWd + '-' + colLikeYear + '-' + RIGHT('0000' + CAST(Id AS varchar(4)), 4), 
    colAnother varchar(100) 
) 
GO 

INSERT dbo.test2(colAnother) 
VALUES('AnotherColumn') 
GO 5 

SELECT * 
FROM dbo.test2 
使用表達式,因爲這可能是簡單

查看演示SQLFiddle

相關問題