我有一个链接服务器,我想在链接服务器上的表中添加一条记录,是否可以从具有链接服务器的另一台服务器获取@@ identity?(SQL Server 2005)
就像前言一样,我对T-SQL语法知之甚少.
我想创建一个简单的SQL脚本,它将生成3个插入语句.
Insert A
Insert B
Insert C
Run Code Online (Sandbox Code Playgroud)
在插入B语句中插入一个语句的标识或"ID".插入C语句中将需要插入A和B的标识.
伪代码看起来像:
INSERT INTO tableA
VALUES ('blah', 'blah')
INSERT INTO tableB
VALUES (IDENTITY_FROM_A_INSERT, 'foo')
INSERT INTO tableC
VALUES (IDENTITY_FROM_A_INSERT, IDENTITY_FROM_B_INSERT)
Run Code Online (Sandbox Code Playgroud)
我该怎么写这个脚本?
我想做一个SELECT来获取ID列表,根据这些ID进行更新,然后返回这些记录.
我想这样的东西,我只是不知道语法:
SELECT WebHookLogIDs = FROM WebHookLog
WHERE Processing=0
AND Processed=0
AND Paused=0
ORDER BY FailCount ASC, WebHookLogID DESC
UPDATE WebHookLog
SET Processing = 1
WHERE WebHookLogID IN(WebHookLogIDs)
SELECT * FROM WebHookLog
WHERE WebHookLogID IN(WebHookLogIDs)
Run Code Online (Sandbox Code Playgroud) 假设我的主体中有一个存储过程:
EXEC 'INSERT INTO ' + quotename(@table) ' blah...'
SELECT IDENT_CURRENT('' + @table + '')
Run Code Online (Sandbox Code Playgroud)
IDENT_CURRENT()是否保证在EXEC中获得该行的标识?IDENT_CURRENT()"返回在任何会话和任何范围内为特定表生成的最后一个标识值",但EXEC中的范围与存储过程不同,对吧?
我想确保如果一次多次调用存储过程,则选择正确的标识.
编辑:或者我需要在EXEC中同时执行INSERT和SELECT,如下所示:
declare @insert nvarchar
set @insert =
'INSERT INTO ' + quotename(@table) ' blah...' +
'SELECT IDENT_CURRENT(''' + @table + ''')'
EXEC @insert
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,如果我想在T-SQL中继续使用更多代码,如何选择EXEC的结果?像这样(虽然它显然不正确):
declare @insert nvarchar
set @insert =
'INSERT INTO ' + quotename(@table) ' blah...' +
'SELECT IDENT_CURRENT(''' + @table + ''')'
declare @ident int
set @ident = EXEC @insert
-- more code
SELECT * FROM blah
Run Code Online (Sandbox Code Playgroud)
更新:在第一个片段中,如果我SELECT SCOPE_IDENTITY()而不是使用IDENT_CURRENT(),则SELECT返回NULL.:(
我在sql服务器上工作,我想在特定的表中插入记录说(a),这个表包含两列[id(身份字段)和名称(nvarchar(max)]现在在表中插入记录(a),触发器应该触发并在表b中插入标识字段值....我正在使用插入触发器之后为此目的,但我没有得到我将如何获得触发器中的标识字段值...应插入表b中.
这就是我正在使用的
create trigger tri_inserts on (a)
after insert
as
begin
insert into b (id, name) values (?,?)
end
Run Code Online (Sandbox Code Playgroud)
请尽快回复..感谢和问候Abbas Electricwala
所以这是帖子的延续: 获取插入行标识的最佳方法?
那个帖子提议,我同意,使用Inserted功能来安全地返回插入的id列。
在实现此功能时,似乎SqlClient.net 框架不支持此功能,并且在尝试执行命令时失败,我收到以下异常:
System.Data.SqlClient.SqlException: '找不到列“INSERTED”或用户定义的函数或聚合“INSERTED.Id”,或者名称不明确。
我只是在使用:
return (T)command.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
查询在哪里:
INSERT INTO MyTable
OUTPUT INSERTED.Id
(Description)
VALUES (@Description)
Run Code Online (Sandbox Code Playgroud)
并且该表仅包含
ID (identity int)
Description (varchar(max))
Run Code Online (Sandbox Code Playgroud)
如果不可能,是否有其他安全的方法而不在中间使用可能影响性能的变量?
谢谢
有没有办法选择插入的行?我正在尝试使用SqlCommand(它用于在数据库中保留给定的id)运行以下查询:
INSERT INTO tbl (id)
SELECT COUNT(*) + 1 AS id from tbl
Run Code Online (Sandbox Code Playgroud)
有没有办法返回插入的id列,以便我可以在我的应用程序中使用它?或者也许有一种更简单的方法可以实现这一目标?我必须绝对确定我保留了免费ID,即使多个用户同时使用该应用程序也是如此.
此外,有没有办法我可以更改查询以选择第一个免费ID,这样我可以避免差距?
我读这个回答有关获取输入到数据库的最后一个标识值的不同方法.
根据我的理解,@@IDENTITY这通常是一个非常糟糕的主意,因为它可能会返回一个与您预期不同的标识 - 例如最近由触发器创建的标识值.
但是,如果您的代码在交易中怎么办?
例如,这是我正在做的事务的简化版本(使用ColdFusion):
<cftransaction>
<cfquery name="queryInsertA" datasource="source">
INSERT INTO tableA (columnName) VALUES (value)
</cfquery>
<cfquery name="queryInsertB" datasource="source">
INSERT INTO tableB (fkey_tableA, columnName) VALUES (@@IDENTITY, value)
</cfquery>
</cftransaction>
Run Code Online (Sandbox Code Playgroud)
因为," 如果事务成功,那么在事务期间进行的所有数据修改都会被提交并成为数据库的永久部分 ",这是否意味着它还可以防止使用时可能出现的问题@@IDENTITY?还是我误解了交易的行为?
我想在运行Insert或Update(使用C#中的Access DB)后检索标识列值.我该怎么做?
我使用Typed数据集来填充和更新......
我有一个带sql server的插入sql然后直接调用select @@ identity,我试图使用带有存储过程的身份id,这是否可能
例如
insert into ...
select @@identity
EXEc add 'ss' @@identity
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑 - -
我基本上想要使用我现在得到的id的值
SELECT SCOPE_IDENTITY();
在插入后直接用于查询.
我在Visual Studio中工作 - VB.NET.
我的问题是我想要删除SQL Server中的特定行,但我唯一的唯一列是自动递增的标识.
我的工作流程:
1.我在列中添加一行(标识正在递增,但我不知道数字)
2.我想删除上一行
每个新记录都有一种唯一的ID吗?我的表可能有2个完全相同的记录,只是序列(标识)不同.
任何想法如何处理这个问题?
使用FireDac,如何在ms sql server上获取最后插入的id?谢谢
我有表 A 和表 B 具有多对多关系。表AB是链接表。
Table: Columns:
A { Id, Name }
AB { A_Id, B_Id }
B { Id, Name }
Run Code Online (Sandbox Code Playgroud)
我想将行插入到表 A 中,然后使用该行的 Id(Id 具有自动递增的标识)插入到链接表中。
是否可以在单个 SQL 命令中执行此操作?
示例(伪sql):
insert into A (Name) values (@name)
insert into AB (A_Id, B_Id) values ([previous id], @b_Id)
Run Code Online (Sandbox Code Playgroud) sql-server ×9
sql ×7
identity ×5
t-sql ×4
c# ×2
insert ×2
.net ×1
anydac ×1
asp.net ×1
coldfusion ×1
database ×1
dataset ×1
delphi ×1
firedac ×1
linked-list ×1
scope ×1
sql-insert ×1
sqlclient ×1
transactions ×1
triggers ×1
unique ×1
vb.net ×1