Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 “多部分标识符”;插入。第“U ID”节;无法约束_Sql Server 2005_Triggers - Fatal编程技术网

Sql server 2005 “多部分标识符”;插入。第“U ID”节;无法约束

Sql server 2005 “多部分标识符”;插入。第“U ID”节;无法约束,sql-server-2005,triggers,Sql Server 2005,Triggers,在我的应用程序中,应该使用Web界面输入数据。如果我输入相同的区段id,则应显示错误消息 我有一张带部门ID的会议桌 当我尝试触发时,我出错了 Msg 4104, Level 16, State 1, Procedure fourone, Line 7 The multi-part identifier "inserted.SECTION_ID" could not be bound. 我错过了什么? 你们能给我一些建议吗?你们需要在这样的连接中引用插入的表: IF( ex

在我的应用程序中,应该使用Web界面输入数据。如果我输入相同的区段id,则应显示错误消息

我有一张带部门ID的会议桌 当我尝试触发时,我出错了

    Msg 4104, Level 16, State 1, Procedure fourone, Line 7
    The multi-part identifier "inserted.SECTION_ID" could not be bound.


我错过了什么?
你们能给我一些建议吗?

你们需要在这样的连接中引用插入的表:

IF( exists (select * from MEETING 
               JOIN inserted ON MEETING.SECTION_ID = inserted.SECTION_ID )) 
BEGIN
    raiserror('ERRORRRRRRRR',15,1);
END
IF(EXISTS(
        SELECT 
          NULL 
        FROM 
          MEETING 
        WHERE EXISTS
          (
             SELECT 
               NULL 
             FROM 
               inserted 
             WHERE 
               inserted.SECTION_ID=MEETING.SECTION_ID
          )
    )
BEGIN
  raiserror('ERRORRRRRRRR',15,1);
END

if语句应如下所示:

IF( exists (select * from MEETING 
               JOIN inserted ON MEETING.SECTION_ID = inserted.SECTION_ID )) 
BEGIN
    raiserror('ERRORRRRRRRR',15,1);
END
IF(EXISTS(
        SELECT 
          NULL 
        FROM 
          MEETING 
        WHERE EXISTS
          (
             SELECT 
               NULL 
             FROM 
               inserted 
             WHERE 
               inserted.SECTION_ID=MEETING.SECTION_ID
          )
    )
BEGIN
  raiserror('ERRORRRRRRRR',15,1);
END
msdn上写着:

DML触发器使用已删除和插入的逻辑(概念)表。 它们在结构上类似于触发器所在的表 已定义,即尝试用户操作的表。这个 已删除和插入的表保留了 可以由用户操作更改的行。例如,检索 删除表中的所有值,请使用


请参阅参考资料

我喜欢你的答案,除了在SQL Server的黑暗时代(我相信是7.0之前),从
SELECT*
切换到
SELECT NULL
可能很有用。但是优化器很早就知道,
EXISTS
中的
SELECT*
只需要确定是否有行-我相信它不会将其扩展为一组完整的列,甚至不会执行模式查找。谢谢。我修正了这个错误,但我得到了另一个错误。当我输入任何值时,它总是显示错误消息。我不知道。我认为linq到sql仍然将contains转换为
selectnull
而不是
SELECT*
。我相信如果你
选择NULL
或evan
选择“doh”查询优化器只关心条件。我认为这只是一种编写语法的风格,为什么不
在会议(SECTION\u ID)上创建唯一的索引IX\u MEETING\u节
而不是触发器?(虽然这也会阻止包含两行相同
SECTION_ID
值的单次插入,这是您当前的触发器和答案仍然允许的)我只想尝试执行触发器。谢谢。我修正了这个错误,但我得到了另一个错误。当我输入任何值时,它总是显示错误消息。你知道问题出在哪里吗?@JayLee-你正在为insert
a.k.a
在insert
trigger之后定义一个
-当它执行时,
insert
中的所有行也出现在基表中。谢谢你给我建议,但是如果我使用“而不是insert”,然后它不会在会议表中输入任何值。@JayLee-如果您编写了一个
而不是insert
触发器,那么您必须在触发器主体内对基表执行实际的insert操作。@Damien\u不信者-谢谢