0

我有一个带有递增 Id ( int) 的插入存储过程。我想把Id它插入到另一个表中,也是插入存储过程中的一个变量。

我知道你可以这样做select from inserted,但如果我没记错的话,你可以从inserted行中选择值。

无论如何在执行存储过程并将其传递给触发器后保持变量?

编辑:对不起,让我包括我正在使用的存储过程。表 foo 有一个自动递增的 Id,我希望在运行此存储过程后触发器将 foo 的 Id 和 @mid 插入另一个表。但是,正如您所看到的,@mid 没有被插入到表 foo 中。

 ALTER PROCEDURE [dbo].[foo]
    @userName varchar(50),
    @somefoo varbinary(max),
    @mid int
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO fooTable(UserName, SomeFoo)
    VALUES (@userName, @somefoo);

END
4

2 回答 2

1

插入的伪表允许您选择表中现在的值。删除的伪表允许您选择插入发生之前表中的值。既然你说插入过程,我假设它不是插入/更新过程。我不清楚你想做什么。您希望触发器复制身份字段和另一列吗?简单的。您希望触发器复制未实际存储在表中的标识字段和 proc 参数吗?不可能 - 但如果这是您想要的,那么您可以在 proc 中执行此操作。

1) 触发器:

Insert into foo (a, b)
select my_identity, some_column
from inserted

2) 过程:

    ..do main insert...
    insert into foo (a, b)
    select scope_identity(), @some_parameter
于 2012-08-29T23:18:33.060 回答
0

您可以将您的表扩展属性用于您的目的。

第 1 步:为您的表定义一个扩展属性。

在此处输入图像描述

第 2 步:在存储过程中,在插入到您的表集之前通过您的参数定义扩展属性。

EXEC sys.sp_updateextendedproperty @name=N'@ParameterName', @value='YourValue' 

第 3 步:在触发器中获取定义的扩展属性并使用它。使用sys.extended_properties表获取定义的扩展属性。

于 2012-08-30T06:08:41.610 回答