SQL 字符串连接问题...

sunlovesea 2009-03-18 08:24:28
DECLARE @sql2 varchar(4000)
SET @sql2='SELECT ROW_NUMBER() OVER (ORDER BY sm.Id DESC)AS Row, sm.*,ps.NM shiftNM,pu.NM unitNM,puser.NM userNM from sce.MaterailBack sm
LEFT JOIN pub.SHIFT ps ON sm.shiftId=ps.ID
LEFT JOIN pub.UNIT pu ON sm.UnitId=pu.ID
LEFT JOIN pub.USERINFO puser ON sm.UserId=puser.ID
Where 1=1'
IF(@ShiftId!=NULL)--这个地方有问题
begin
SET @sql2=@sql2+' AND sm.ShiftId=@ShiftId'
end
IF(@TeamId!=NULL) SET @sql2=@sql2+' AND sm.TeamId=@TeamId'
IF(@Dt!=NULL) SET @sql2=@sql2+' AND sm.Dt=@Dt'
IF(@startIndex!=NULL AND @endIndex!=null) SET @sql2=@sql2+' AND Row between @startIndex and @endIndex '
--EXEC (@sql2)
PRINT @sql2

上面的代码是存储过程中的一部分,现在存在的问题是:无论@ShiftId、@TeamId是否为NULL这一句都不会执行
' AND sm.ShiftId=@ShiftId',也就是不能连接到Where 1=1 后面。大家帮忙看看..
...全文
149 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzxap 2009-03-18
  • 打赏
  • 举报
回复
[code=SQL]
DECLARE @sql2 varchar(4000)
SET @sql2='SELECT ROW_NUMBER() OVER (ORDER BY sm.Id DESC)AS Row, sm.*,ps.NM shiftNM,pu.NM unitNM,puser.NM userNM from sce.MaterailBack sm
LEFT JOIN pub.SHIFT ps ON sm.shiftId=ps.ID
LEFT JOIN pub.UNIT pu ON sm.UnitId=pu.ID
LEFT JOIN pub.USERINFO puser ON sm.UserId=puser.ID
Where 1=1'
IF(@ShiftId is not NULL)
begin
SET @sql2=@sql2+' AND sm.ShiftId=@ShiftId '
end
IF(@TeamId is not NULL)
begin
SET @sql2=@sql2+' AND sm.TeamId=@TeamId'
end
IF(@Dt is not NULL)
begin
SET @sql2=@sql2+' AND sm.Dt=@Dt'
end
IF(@startIndex is not NULL AND @endIndex is not null)
begin
SET @sql2=@sql2+' AND Row between @startIndex and @endIndex '
end
EXEC @sql2
PRINT @sql2


[/CODE]
xfreyes 2009-03-18
  • 打赏
  • 举报
回复
其实是对null的理解问题 。

在 SQL 语句中, NULL 值与字符列中的空格, 数字中的零, 字符列中的 NULL ASCII 字符都不相同. 当DBMS在一列中发现一个 NULL 值时, 就将其翻译为未定义或是不可用的. DBMS不能在一列中做出有关 NULL 的假设, 也不能假设 NULL 值等于 NULL, 造成某一列成为 NULL 的因素可能是: (1),值不存在;(2), 值未知; (3), 列对表不可用. 所以, 应将 NULL 值当作是一个批示符, 而不是一个值. 当DBMS 在表的某一行的某一列中找到 NULL 值时, DBMS就知道该数据已丢失或者是不可用.

   一句话, NULL 指示这个值 "未知",原因是它可能不存在, 可能不可用, 也可能就是因为值未知.

所以用!=或者<>判断是无法判断出你理解的null的,需要用is not
xfreyes 2009-03-18
  • 打赏
  • 举报
回复
恩 用is not null
sunlovesea 2009-03-18
  • 打赏
  • 举报
回复
谢谢楼上的,的确是Is not null 判断可以。

但是!=null为什么不行呢?两者有什么别吗?
sunlovesea 2009-03-18
  • 打赏
  • 举报
回复
!=NULL 和is not null 有什么区别?怎么都没报错!
sunlovesea 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jijunwu 的回复:]
@ShiftId!=NULL 没有判断错误
[/Quote]
什么意思?
HsWong 2009-03-18
  • 打赏
  • 举报
回复
空判断有问题
@TeamId!=NULL
改为
@TeamId IS NOT NULL
  • 打赏
  • 举报
回复
@ShiftId!=NULL 没有判断错误
moonshineidolon 2009-03-18
  • 打赏
  • 举报
回复
SET @sql2=@sql2+' AND sm.ShiftId=@ShiftId'
这句话, 不知道你想怎么用,这么写@ShiftId 这个变量是拼不上的

SET @sql2=@sql2+' AND sm.ShiftId= '''+@ShiftId +'''
moonshineidolon 2009-03-18
  • 打赏
  • 举报
回复
IF(@ShiftId is null)

判定 是不是空
moonshineidolon 2009-03-18
  • 打赏
  • 举报
回复
你这回答的根本不对啊
简直是瞎说

is not null 是Sql 特有的语法


!=null 是C的语法

62,268

社区成员

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

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

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

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