Sql 插入到具有标识列的多个表中
我这里的问题是,当没有记录插入Sql 插入到具有标识列的多个表中,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我这里的问题是,当没有记录插入汇款表时,@remittenaceid将获取交易表的标识值 假设事务表中插入的标识值为1,汇款表中没有记录,那么@TransactionID和@transmittanceid都设置为1,但我希望@TransactionID值设置为1,@transmittanceid为空 有没有办法,如果没有记录插入到汇款表中,@remittenaceid值应该设置为NULL。您可以在这里使用@@ROWCOUNT来确定上一条语句中是否发生了更新 INSERT INTO [dbo].[
汇款
表时,@remittenaceid
将获取交易
表的标识值
假设事务表中插入的标识值为1,汇款
表中没有记录,那么@TransactionID
和@transmittanceid
都设置为1,但我希望@TransactionID
值设置为1,@transmittanceid
为空
有没有办法,如果没有记录插入到
汇款
表中,@remittenaceid
值应该设置为NULL。您可以在这里使用@@ROWCOUNT
来确定上一条语句中是否发生了更新
INSERT INTO [dbo].[Transactions] ([PartnerId], [TransactionId], [ver], [InsertedBy], [InsertedDateTime], [SavedBy], [SavedDateTime])
SELECT
[PartnerId], [TransactionId], [ver], [InsertedBy],
[InsertedDateTime], [SavedBy], [SavedDateTime]
FROM
@parTransaction;
SET @TransactionID = @@IDENTITY;
INSERT INTO [dbo].[Remittances] ([TransactionID], [RemittanceTransactionId],[InsertedBy], [InsertedDateTime], [SavedBy], [SavedDateTime])
SELECT
@TransactionID, [RemittanceTransactionId], [InsertedBy],
[InsertedDateTime], [SavedBy], [SavedDateTime]
FROM
@parRemittance;
SET @RemittanceID = @@IDENTITY ;
尝试以下两个功能:
- 返回为指定表或视图生成的最后一个标识值。最后生成的标识值可以用于任何会话和任何作用域
- 返回插入到同一范围内标识列中的最后一个标识值。作用域是一个模块:存储过程、触发器、函数或批处理。因此,如果两条语句位于同一存储过程、函数或批处理中,则它们位于同一范围内+李>
也许,您可以同时使用这两种方法。您应该考虑使用输出。如果要坚持使用两个独立的语句,则应该使用SCOPE\u IDENTITY。我还建议使用
SCOPE\u IDENTITY()
而不是其他任何东西来获取新插入的标识值。我同意肖恩的看法。我想输出能解决你的问题。只需声明一个包含一列的新表变量,并在表变量中插入标识列值
INSERT INTO [dbo].[Remittances]
([TransactionID],[RemittanceTransactionId],[InsertedBy],[InsertedDateTime],[SavedBy],[SavedDateTime])
SELECT
@TransactionID,[RemittanceTransactionId],[InsertedBy],[InsertedDateTime],[SavedBy],[SavedDateTime]
FROM @parRemittance;
SET @RemittanceID = @@IDENTITY ;
IF(@@ROWCOUNT=0) SET @RemittanceID = NULL