我有一个带有递增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
答案 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步:为表定义扩展属性。
步骤2:在插入表格之前的存储过程中,通过参数设置定义的扩展属性。
EXEC sys.sp_updateextendedproperty @name=N'@ParameterName', @value='YourValue'
步骤3:在触发器中获取已定义的扩展属性并使用它。
使用sys.extended_properties
表获取已定义的扩展属性。