這是我的表,我希望我的PNRNo生成爲'PNRRES001'用於第一個條目,連續條目用'PNRRES002','PNRRES002'等。 因此,在創建表格時,我只需將該列調用到將生成PNR號碼的功能,用戶只需從前端輸入CustomerNo,客戶號碼將被更新爲PNRDetails表格。如何生成一個ID爲每個插入增量的列
CREATE TABLE PNRDetails(PNRNo AS (DBO.FuncIncPNR()) ,customerNo INT
--FUNCTION TO GENERATE THE PNR NUMBER
ALTER FUNCTION dbo.FuncIncPNR()
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @RR VARCHAR(20) SET @RR='PNRRESA001'
--here i have checked if no value is there then return the first value as 'PNRRESA001'
IF((SELECT COUNT(*)FROM PNRDetails)=0)
BEGIN
RETURN @RR
END
ELSE
-- if any value is there then take the last value and add 1 to it and update to the table
BEGIN
DECLARE @pnr VARCHAR(20),@S1 VARCHAR(20),@S2 INT
DECLARE PNRCursor CURSOR Static
FOR SELECT PNRNo FROM PNRDetails
OPEN PNRCursor
FETCH LAST FROM PNRNo INTO @pnr
SET @S1=SUBSTRING(@pnr,1,7)
SET @S2=RIGHT(@PNR,3)
SET @[email protected]+1;
SET @[email protected][email protected];
END
RETURN @pnr
END
--Here am inserting only customerNo as 5 and the PNR should be generated by my function
INSERT INTO PNRDetails VALUES(5)
--it shows 1 row updated :)
SELECT * FROM PNRDetails
-- but when i run select command it shows
--Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32). :(
你可以運行這個。如果你找到任何可以幫助我的東西,請幫忙。任何幫助將不勝感激... 等待您的迴應...
請用** PNRDetails替換** Table1 ** – Kaf 2012-03-09 13:30:57
感謝您的好評,但身份的一個缺點是如果我插入任何值的表,如果任何一點我ROLLBACK,差距創建,所以我想以避免IDENTITY ... – 2012-03-10 04:06:13
我已經編輯,因爲你需要。請注意,這不是持久的。即如果您在任何時候刪除一行,customerNo將隨函數返回行數而更改。如果您需要持久保存,只需在表格的設計視圖中更改即可。設計視圖>選擇customerNo列>將持久性更改爲yes。 – Kaf 2012-03-10 09:45:40