SQL Server触发器 - 从第一个Insert存储过程获取变量?

时间:2012-08-29 22:49:49

标签: sql-server tsql

我有一个带有递增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

2 个答案:

答案 0 :(得分:1)

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

1)触发:

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

2)Proc:

    ..do main insert...
    insert into foo (a, b)
    select scope_identity(), @some_parameter

答案 1 :(得分:0)

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

第1步:为表定义扩展属性。

enter image description here

步骤2:在插入表格之前的存储过程中,通过参数设置定义的扩展属性。

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

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