Как я могу взять последнее вставленное поле PK computed varchar(7) в качестве вывода
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
Я пробовал много способов получить вывод вставленного.Ad_Regid... Не получая, я пытался выбрать @Ad_Regid = SCOPE_IDENTITY()
тоже.
Спасибо...
3 ответа
Решение
Попробуйте эти три варианта на ваш выбор -
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
Вам нужно использовать OUTPUT
пункт:
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);
Как только ваш оператор вставки будет выполнен, у вас все будет вставлено ID
и соответствующий Ad_RegId
значения внутри вашей табличной переменной @OutputValues
SELECT ID, RegID FROM @OutputValues
Узнайте больше о OUTPUT
положение о SQL Server Books Online
Вы пытались использовать глобальный 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