Tej*_* MB 0 sql-server asp.net ado.net sql-server-2005 sql-server-2008
这是我的表格,我希望我的PNRNo为第一个条目生成'PNRRES001',连续条目为'PNRRES002','PNRRES002'等等.因此,在创建表时,我只调用该列来生成PNR否,用户只需从前端输入CustomerNo,PNR和Customer No的数据将更新为PNRDetails表.
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 @S2=@S2+1;
SET @pnr=@S1+@S2;
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). :(
Run Code Online (Sandbox Code Playgroud)
你可以运行这个.如果你找到任何可以帮助我的东西,请帮忙.任何帮助将不胜感激......等待您的回复......
您可以尝试使用计算列和标识列.
create table PNRDetails
(
ID int identity,
PNRNo as 'PNRRES'+right(1000+ID, 3),
customerNo int
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |