【问题标题】:Stored Procedure Error: Ambiguous column存储过程错误:不明确的列
【发布时间】:2015-11-03 07:55:31
【问题描述】:

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

消息 209,级别 16,状态 1,过程 InsertNonExistingNode,第 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

【问题讨论】:

标签: sql sql-server tsql stored-procedures


【解决方案1】:

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

为了解决它 - 只需在选择列表中使用适当的别名,即 t.NodeTypeIdPR.NodeTypeId

【讨论】:

    【解决方案2】:

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

    提示:如果您在表上使用别名,总是指定特定列的别名,这样您就不会遇到该错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多