存储过程错误:不明确的列

时间:2015-11-03 07:55:32

标签: sql sql-server tsql stored-procedures

获取每列的跟随错误(注意,两个表具有相同的列名,但我不确定如何为表数据类型添加前缀)

  

Msg 209,Level 16,State 1,Procedure InsertNonExistingNode,Line 21   不明确的列名称' NodeTypeId'。

USE NWatchEntitiesUnitTest
GO

CREATE PROCEDURE InsertNonExistingNode (@TableVariable dbo.NodeTableType READONLY, 
                                        @ScalarParameter nvarchar(255))
AS
BEGIN
INSERT INTO NWatchNodes WITH (ROWLOCK) (
      NodeTypeId,
      Location,
      DisplayName,
      AccessLevel,
      IsEnabled,
      CreatedOn,
      CreatedBy,
      ModifiedOn,
      ModifiedBy,
      NativeId,
      SourceId,
      Name,
      Alias) 

    SELECT 
    NodeTypeId,
    Name,
    Location,
      DisplayName,
      AccessLevel,
      IsEnabled,
      CreatedOn,
      CreatedBy,
      ModifiedOn,
      ModifiedBy,
      NativeId,
      SourceId,
      Alias

    FROM @TableVariable t
        /*Left Join then where ID is null to make sure the record doesn't exists*/
        LEFT JOIN NWatchNodes PR WITH (NOLOCK) 
                                ON  PR.ID = @ScalarParameter
                                AND PR.Name = t.Name
        WHERE PR.ID IS NULL
END

GO

2 个答案:

答案 0 :(得分:4)

这意味着您在NodeTypeId@TableVariable表中都有NWatchNodes列。

要解决此问题,只需在选择列表中使用适当的别名,即t.NodeTypeIdPR.NodeTypeId

答案 1 :(得分:3)

您在别名方面存在问题,为了进一步了解问题,该错误意味着您在两个表中具有相同/相似的列名。

提示:如果您在桌面上使用别名,始终指定特定列的别名,以便您不会遇到该错误。