C# 表与存储过程和触发器的关系

C# 表与存储过程和触发器的关系,c#,sql,sql-server,C#,Sql,Sql Server,简单地说,我有以下几点: C#表单-->表A(通过存储过程) 我正在努力实现的目标: C#表格-->表格A-->表格B 信息从C#表单发送到表A。我想从表A将相关列发送到表B TableA (ProfileID) = Table B (UserID) 因此,我在存储过程中创建了一个触发器,该触发器与c#form连接: 但是当我的存储过程从C#form执行时,我得到一个错误: 列名“UserID”无效 提前感谢。如问题评论中所述,最好将插入内容放入已调用的存储过程中的事务中,但如果必须执行触发器

简单地说,我有以下几点:

C#表单-->表A(通过存储过程)

我正在努力实现的目标:

C#表格-->表格A-->表格B

信息从C#表单发送到表A。我想从表A将相关列发送到表B

TableA (ProfileID) = Table B (UserID)
因此,我在存储过程中创建了一个触发器,该触发器与c#form连接:

但是当我的存储过程从C#form执行时,我得到一个错误:

列名“UserID”无效


提前感谢。

如问题评论中所述,最好将插入内容放入已调用的存储过程中的事务中,但如果必须执行触发器,这就是它的外观。请注意特定的名称,然后从插入的表中执行插入

ALTER TRIGGER UserProfile_CreateUser
ON  dbo.UserProfile
FOR INSERT
AS
BEGIN
    INSERT dbo.Users (UserID)
        SELECT ProfileID
        FROM INSERTED
END
GO

有关虚拟表的更多信息:

您的触发器代码有很多错误。。也许你只需要表单,或者存储过程,做额外的插入?同意Blorgbeard。如果在一个事务中包装这两个插入项,则可以获得相同的效果,但风险较小。@Blorgbeard我对触发器不熟悉,您能解释一下什么是错误的吗?我想做的是:每当从表单向表中进行新的插入时,表a中的字段(自动递增)也会进入表B。如果有更简单的方法,请告诉我。简单地说:@ProfileID从未分配任何内容;这一选择只是丢掉了它的结果。它还只是选择表中的所有内容,而不是刚刚插入的内容。并且您只有一个
@ProfileID
——一个触发器可以对插入的多行执行一次。您需要访问插入的虚拟表。我想您需要学习更多关于TSQL脚本的知识,才能用触发器完成这项工作。谢谢您的帮助。我认为在这种情况下使用触发器可能不是最好的解决方案。我正在研究事务,我看到的示例都有硬编码的值,如果我要执行此事务,我将如何实现这一点:SET userID=ProfileID,WHERE。。。
ALTER TRIGGER UserProfile_CreateUser
ON  dbo.UserProfile
FOR INSERT
AS
BEGIN
    INSERT dbo.Users (UserID)
        SELECT ProfileID
        FROM INSERTED
END
GO