各位来解释下这2者的区别

jsyxo 2006-11-22 02:27:19
这样是不会报错的:
select * from
(SELECT RunAlarmData.ID,RunAlarmData.ChannelID,
dbo.GetChannelNodeName(RunAlarmData.ChannelID,RunAlarmData.MsgID) as NodeName
FROM RunAlarmData ) a
where NodeName Like '%枢纽中心%'

=========================
这样是要报错的:

SELECT RunAlarmData.ID,RunAlarmData.ChannelID,
dbo.GetChannelNodeName(RunAlarmData.ChannelID,RunAlarmData.MsgID) as NodeName
FROM RunAlarmData
where NodeName Like '%枢纽中心%'

哪个达人说下这两者有什么区别么?这个SQL语句在运行时怎么运行的?为什么我把结果做为一个表在执行的时候不会报错,而直接进行条件选择时会抱错?
...全文
144 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbqc_zh 2006-11-22
  • 打赏
  • 举报
回复
因为不存在RunAlarmData.NodeName字段
jetdw 2006-11-22
  • 打赏
  • 举报
回复
1楼的说的很准确
zzxiaoma 2006-11-22
  • 打赏
  • 举报
回复
不应该吧
tx1icenhe 2006-11-22
  • 打赏
  • 举报
回复
可以这样:

SELECT RunAlarmData.ID,RunAlarmData.ChannelID,
dbo.GetChannelNodeName(RunAlarmData.ChannelID,RunAlarmData.MsgID) as NodeName
FROM RunAlarmData
where dbo.GetChannelNodeName(RunAlarmData.ChannelID,RunAlarmData.MsgID) Like '%枢纽中心%'


但是函数需要调用两次,影响效率


tx1icenhe 2006-11-22
  • 打赏
  • 举报
回复
区别在于:
第二个语句的where NodeName Like '%枢纽中心%' 系统认为是where RunAlarmData.NodeName Like '%枢纽中心%' ,而不存在RunAlarmData.NodeName字段,所以出错
第一个语句的where NodeName Like '%枢纽中心%' 系统认为是where a.NodeName Like '%枢纽中心%' ,a.NodeName就是函数的返回值,a是别名,一切符合规则,不出错

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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