如何在T- sql T中处理范围标识语句?



似乎没有任何方法可以伪造一个表,然后在伪造的表上运行SCOPE_IDENTITY函数。

取这个语句(在存储过程中)

INSERT INTO [dbo].[SomeTable](Id1, Id2) 
VALUES (@Id1, @Id2)
SET @SomeIdentity =  SCOPE_IDENTITY()
INSERT INTO [dbo].[Table2](Id3)
VALUES(@SomeIdentity)

如果我试着测试这段代码

我将像这样创建table [SomeTable]

EXEC [tSQLt].[FakeTable] @TableName = N'[SomeTable]',
@SchemaName = N'dbo',
@Identity = 0,
@ComputedColumns = 1,
@Defaults = 1
EXEC [tSQLt].[FakeTable] @TableName = N'[Table2]',
@SchemaName = N'dbo',
@Identity = 0,
@ComputedColumns = 1,
@Defaults = 1

但是,当涉及到测试具有范围标识列的代码块时,Id3总是空的。

我已经尝试过identity = 0或1,但T-SQL似乎无法处理这种情况。

有人解决了这个问题吗?

使用tSQLt.FakeTable时,需要将@identity参数设置为1以保留标识列:

EXEC [tSQLt].[FakeTable] 
@TableName = N'dbo.[SomeTable]',
@Identity = 1,
@ComputedColumns = 1,
@Defaults = 1

(注意:@SchemaName参数已弃用)

最新更新