Domanda

DDL:

CREATE TABLE [dbo].[Admin_Profile](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Ad_Regid]  AS ('R'+right('200'+CONVERT([varchar](10),[ID],(0)),(6))) PERSISTED NOT NULL,
    [Ad_Fname] [varchar](25) NULL,
    [Ad_Lname] [varchar](25) NULL,

 CONSTRAINT [PK_Admin_Profile] PRIMARY KEY CLUSTERED 
(
    [Ad_Regid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

SP:

create procedure _insertAdminProfile
(
    @Ad_Fname varchar(25),
    @Ad_Lname varchar(25),
    @Ad_Pwd varchar(7) Out
    as 

    Begin

    insert into dbo.Admin_Profile (Ad_Fname,Ad_Lname) values (@Ad_Fname,@Ad_Lname);

    SELECT ISNULL(MAX(@Ad_Pwd), 0) + 1 FROM dbo.Admin_Profile

    end

I tried many ways to get the output of inserted.Ad_Regid...Not getting, I tried select @Ad_Regid = SCOPE_IDENTITY() too.

Thanks...

È stato utile?

Soluzione 2

Try this three variants to the your choice -

1:

CREATE PROCEDURE _insertAdminProfile
(
     @Ad_Fname VARCHAR(25),
     @Ad_Lname VARCHAR(25),
     @Ad_Pwd VARCHAR(7) OUTPUT
)
AS BEGIN

     INSERT INTO dbo.Admin_Profile (Ad_Fname, Ad_Lname)
     VALUES (@Ad_Fname, @Ad_Lname)

     SELECT @Ad_Pwd = [Ad_Regid]
     FROM dbo.Admin_Profile
     WHERE [ID] = SCOPE_IDENTITY()

END

2:

CREATE PROCEDURE _insertAdminProfile
(
     @Ad_Fname VARCHAR(25),
     @Ad_Lname VARCHAR(25),
     @Ad_Pwd VARCHAR(7) OUTPUT
)
AS BEGIN

     INSERT INTO dbo.Admin_Profile (Ad_Fname, Ad_Lname)
     VALUES (@Ad_Fname, @Ad_Lname)

     SELECT @Ad_Pwd = 'R' + RIGHT('200'+CONVERT(VARCHAR(10),SCOPE_IDENTITY(),0), 6)

END

3:

CREATE PROCEDURE _insertAdminProfile
(
     @Ad_Fname VARCHAR(25),
     @Ad_Lname VARCHAR(25),
     @Ad_Pwd VARCHAR(7) OUTPUT
)
AS BEGIN

     DECLARE @MyTableVar TABLE (Ad_Pwd VARCHAR(7));

     INSERT INTO dbo.Admin_Profile (Ad_Fname, Ad_Lname)
     OUTPUT INSERTED.Ad_Regid INTO @MyTableVar
     VALUES (@Ad_Fname, @Ad_Lname)

     SELECT @Ad_Pwd = Ad_Pwd
     FROM @MyTableVar

END

Altri suggerimenti

You need to use the OUTPUT clause:

DECLARE @OutputValues TABLE (ID INT, RegID VARCHAR(7))

INSERT INTO dbo.Admin_Profile (Ad_Fname, Ad_Lname) 
OUTPUT Inserted.Id, Inserted.Ad_RegId INTO @OutputValues(ID, RegID)
VALUES(@Ad_Fname, @Ad_Lname);

Once your insert statement has run, you'll have all inserted ID and corresponding Ad_RegId values inside your table variable @OutputValues

SELECT ID, RegID FROM @OutputValues

Read more about the OUTPUT clause on SQL Server Books Online

Have you tried using the global varaibale @@IDENTITY?

CREATE PROCEDURE _insertAdminProfile
(
     @Ad_Fname VARCHAR(25),
     @Ad_Lname VARCHAR(25),
     @ident NUMERIC OUT
)
AS BEGIN

     INSERT INTO dbo.Admin_Profile (Ad_Fname, Ad_Lname)
     VALUES (@Ad_Fname, @Ad_Lname);

     SET @ident = @@IDENTITY;

END
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top