Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将输出inserted.\u ID的值存储到局部变量,以便在另一个查询中重用它_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 将输出inserted.\u ID的值存储到局部变量,以便在另一个查询中重用它

Sql 将输出inserted.\u ID的值存储到局部变量,以便在另一个查询中重用它,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我只想执行一个SQL查询,返回添加到表中的行的当前id,例如: insert into V_Post output inserted._ID values('Please return the id of THIS row :)') 它将返回一个类似于155的数字 因此,我的问题的目的是将该数字存储在某种局部变量(如XVALUE)中,然后在任何其他SQL查询中使用该XVALUE,如: insert into V_Posts values(1, XVALUE, null, GETDATE(),

我只想执行一个SQL查询,返回添加到表中的行的当前id,例如:

insert into V_Post output inserted._ID values('Please return the id of THIS row :)')
它将返回一个类似于155的数字

因此,我的问题的目的是将该数字存储在某种局部变量(如XVALUE)中,然后在任何其他SQL查询中使用该XVALUE,如:

insert into V_Posts values(1, XVALUE, null, GETDATE(), null, null, 1)
所以我想到了这样的事情:

int XVALUE = insert into V_Post output inserted._ID values('Please return the id of THIS row :)')

insert into V_Posts values(1, XVALUE, null, GETDATE(), null, null, 1)

但两者都不起作用:(

我希望我能很好地解释我的问题,我真的提前感谢你的帮助

编辑


请注意,我有两个表:V_post和V_post

您可以使用
SCOPE_IDENTITY()

它返回在连接上生成的最后一个标识值,而不考虑生成该值的表


您可以找到有关此值含义的详细信息

标识列

如果它是一个标识列,并且只插入一行,则可以使用
SCOPE\u identity()
函数获取当前会话范围内最后生成的标识值

DECLARE @NewValue INT;
insert into V_Post 
values('Please return the id of THIS row :)')
SET @NewValue = SCOPE_IDENTITY()
如果不是标识列或多个标识值

如果它是一个标识列,并且您要插入多行并希望返回所有新插入的标识值,或者它不是一个标识列,但您需要最后一个插入的值,那么您可以确保使用
OUTPUT
命令来获取新插入的值

DECLARE @tbl TABLE (Col1 DataType)
DECLARE @NewValue Datatype;

insert into V_Post 
output inserted._ID INTO @tbl
values('Please return the id of THIS row :)')

SELECT @NewValue = Col1 FROM @tbl

您不能将插入的.Id值直接存储到变量中,您必须声明表变量,而不是从表变量中存储到变量中

例如:

-- checking existence of table
IF OBJECT_ID ('Books', 'U') IS NOT NULL
DROP TABLE dbo.Books;

-- creating table
CREATE TABLE dbo.Books
(
  BookID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  BookTitle nvarchar(50) NOT NULL,
  ModifiedDate datetime NOT NULL
);

-- declaring variable
DECLARE @bookId INT;

INSERT INTO Books 
OUTPUT SET @bookId= INSERTED.BookID  
VALUES( 'One Hundred Years of Solitude', GETDATE());
上面的insert查询将给出错误,因为您不能将值直接存储到变量中

--Declaring table variable
DECLARE @InsertOutput TABLE
(
  BookID INT
)

INSERT INTO Books 
OUTPUT INSERTED.BookID 
INTO @InsertOutput
VALUES( 'One Hundred Years of Solitude', GETDATE());

SELECT @bookId = BookID FROM @InsertOutput;

SELECT @bookId bookId
现在,您可以在@bookId变量上面的任何地方使用它

如果不想使用inserted,则可以使用Scope_identity(),并可以将值直接存储到变量中,但有时使用Scope_identity()可能会影响性能


请注意,

这是否有帮助:这是一个标识列吗???是的,但请注意我有两个表:V_post和V_post,我试图获取一个表的ID并将其用于另一个表使用@@Identity从来都不是一个好主意,它将从任何表返回当前会话中生成的最后一个标识值。使用Identity\u current('table_Name'))函数,该函数将为作为参数传递的表名返回上次生成的值一旦您在参数中获得了值,可以在任何您喜欢的位置使用它,则可以对其他表进行任何更新。感谢您的回答,但请注意,我有两个表:V_post和V_post。我不尝试获取当前的行数同一张表。深入查看答案,它不涉及行数,也不涉及一张表的事务。非常感谢,这就是我要找的:)没问题,朋友,很高兴它有帮助:)@MartinSmith-我很高兴看到另一个解决方案。@Yosi@@IDENTITY返回当前会话中生成的最后一个标识值,这很容易出错,您可以一次在多个表中插入,使用IDENTITY\u current可以消除这一点risk@MartinSmith干杯朋友会记住这一点的,我从来没有想到过。不管怎样,你每天都会学到一些新东西:)我可以问一下,那么@InsertOuput上的列名应该与INSERTED中的列名相同吗?如果我想使用multiple INSERTED,只需使用列的相同名称,对吗?@Rian-不,只有数据类型应该相同。
-- checking existence of table
IF OBJECT_ID ('Books', 'U') IS NOT NULL
DROP TABLE dbo.Books;

-- creating table
CREATE TABLE dbo.Books
(
  BookID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  BookTitle nvarchar(50) NOT NULL,
  ModifiedDate datetime NOT NULL
);

-- declaring variable
DECLARE @bookId INT;

INSERT INTO Books 
OUTPUT SET @bookId= INSERTED.BookID  
VALUES( 'One Hundred Years of Solitude', GETDATE());
--Declaring table variable
DECLARE @InsertOutput TABLE
(
  BookID INT
)

INSERT INTO Books 
OUTPUT INSERTED.BookID 
INTO @InsertOutput
VALUES( 'One Hundred Years of Solitude', GETDATE());

SELECT @bookId = BookID FROM @InsertOutput;

SELECT @bookId bookId