列前缀与查询中所用的表名或列名不匹配

longyzu 2008-08-01 10:01:14
CREATE PROC Pr_UpdateBoardInfo
(
@BoardID INT,
@board VARCHAR(100),
@newModeratorID VARCHAR(20)
)
AS

BEGIN TRAN
--修改版块名称
IF Boards.Board <> @board //此处出错
BEGIN
UPDATE Boards
SET Boards.Board = @board
WHERE BoardID = @BoardID
END
IF @@ERROR <> 0
ROLLBACK TRAN

--修改版主,调用Pr_AppointModerator存储过程,他内部自定义了事务
IF @newModeratorID <> Boards.ModeratorID //此处出错
EXECUTE [Pr_AppointModerator]
@boardID = @BoardID, -- int
@newModID = @newModeratorID -- varchar(20)
总出错 列前缀 'Boards' 与查询中所用的表名或别名不匹配。出错的地方用注释表出来了
Boards表结构
BoardsID int not null
Board varchar 100 not null
ModeratorID varchar 20
...全文
236 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jack20080808 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 leo_qh 的回复:]
首先IF Boards.Board <> @board //此处出错
Boards.Board是一个集合,而@board是一个常量.一个集合和一个常量比较当然报错了.
其次你问到..
select 1 from ...
那是增加一个临时列,列的值都为1 .
[/Quote]
sql没有集合这个概念,只有列表的概念,我select 1的目的,是不想取出其它没必要的列,提高执行速度
jack20080808 2008-08-01
  • 打赏
  • 举报
回复
你上面错的原因在于Boards.Board <> @board 直接这么写是不存在的,
看了一下你的存储过程的这一步的目的只是为了看看表中是否存在Board值与@board相等的数据,所以就没必要取出列了,select 1就可以了.
消瘦的锁骨浩 2008-08-01
  • 打赏
  • 举报
回复
首先IF Boards.Board <> @board //此处出错
Boards.Board是一个集合,而@board是一个常量.一个集合和一个常量比较当然报错了.
其次你问到..
select 1 from ...
那是增加一个临时列,列的值都为1 .
longyzu 2008-08-01
  • 打赏
  • 举报
回复
非常感谢,问题解决了,可是不知道为什么我的写法不对,还有,select 1 from ... 还可以这样写啊, select后面不一定要跟列名吗
jack20080808 2008-08-01
  • 打赏
  • 举报
回复
IF Boards.Board <> @board //此处出错
改成
if not exists(select 1 from Boards where Board=@board)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧