select 查询结果处理??

phoenixsoft 2003-10-19 03:50:25
select @chezhangID = Chezhang_ID
from Log_CTC
where Next_ID = NULL
if (@chezhangID = NULL)
begin
...
end
else
begin
...
end

Chezhang_ID和Next_ID字段定义如下:

Chezhang_ID varchar(8)
Next_ID varchar(8)

我想将满足条件的记录的Chezhang_ID字段放入变量@chezhangID中,然后根据它是否等于NULL来做其他处理,不知道这样写对吗?
...全文
69 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
phoenixsoft 2003-10-20
  • 打赏
  • 举报
回复
to zarge(鲨至):
表中只有第一个记录的Previor_ID字段是NULL,只有最后一个记录的Next_ID字段是NULL,所以我每次添加记录的时候总是将原来最后的记录的Next_ID改为要加入的记录的ID,然后加入新记录。
phoenixsoft 2003-10-20
  • 打赏
  • 举报
回复
我是这样使用这个存储过程的:
EXEC CTC_Add @trainID = '1123'
phoenixsoft 2003-10-20
  • 打赏
  • 举报
回复
能不能帮忙看看这个存储过程有什么问题,为什么加入的记录的Previor_ID 是NULL呢?

CREATE PROCEDURE CTC_Add
@preID varchar(8) = NULL,
@nextID varchar(8) = NULL,
@stationID varchar(8) = NULL,
@trainID varchar(8) = NULL,
@numID varchar(8) = NULL,
@groupID varchar(8) = NULL,
@driverID varchar(8) = NULL,
@count tinyint = 0
AS
declare @err int, @chezhangID varchar(8)
begin tran
declare CTC_cur cursor for select Chezhang_ID,Jiche_ID from Log_CTC where Next_ID is NULL
open CTC_cur
fetch next from CTC_cur into @chezhangID,@preID
while @@fetch_status = 0
begin
update Log_CTC
set Next_ID = @trainID
where Next_ID is NULL
end
set @err = @@error
if @err != 0
begin
rollback tran
return
end
if (@chezhangID is NULL)
begin
insert into
Log_CTC(Previor_ID,Next_ID,Chezhang_ID,Jiche_ID,Checi_ID,Chezhu_ID,
Driver_ID,Err_count)
values(@preID,@nextID,@stationID,@trainID,@numID,@groupID,@driverID,
@count)
end
else
begin
insert into
Log_CTC(Previor_ID,Next_ID,Chezhang_ID,Jiche_ID,Checi_ID,Chezhu_ID,
Driver_ID,Err_count)
values(@chezhangID,@nextID,@stationID,@trainID,@numID,@groupID,@driverID,
@count)
end
set @err = @@error
if @err != 0
begin
rollback tran
return
end
commit tran
GO

lqps1981 2003-10-20
  • 打赏
  • 举报
回复
任何其它数值相比均返回未知,这是因为每个空值均为未知。

空值通常表示未知、不可用或将在以后添加的数据。例如,客户的中间名首字母在客户下定单时可能不知道。

下面是有关空值的一些信息:

若要测试查询中的空值,请在 WHERE 子句中使用 IS NULL 或 IS NOT NULL。


在 SQL 查询分析器中查看查询结果时,空值在结果集内显示为 (null)。


可通过以下方法在列中插入空值:在 INSERT 或 UPDATE 语句中显式声明 NULL,或不使此列进入 INSERT 语句,或使用 ALTER TABLE 语句在现有表中新添一列。


不能将空值用于区分表中两行所需的信息(例如,外键或主键)。
在程序代码中,可以检查空值以便只在具有有效(或非空)数据的行上进行某些计算。例如,报表可以只打印社会安全列中数据不为空的列。执行计算时消除空值很重要,因为如果包含空值列,某些计算(如平均值)会不准确。

zarge 2003-10-20
  • 打赏
  • 举报
回复
你能保证从光标取出来的@preID肯定不是NULL值吗?

用ISNULL()试试
insert into
Log_CTC(Previor_ID,Next_ID,Chezhang_ID,Jiche_ID,Checi_ID,Chezhu_ID,
Driver_ID,Err_count)
values(ISNULL(@preID, 'ZZZZZZZZ'),@nextID,@stationID,@trainID,@numID,@groupID,
@driverID,@count)
zarge 2003-10-19
  • 打赏
  • 举报
回复
空值
空 (NULL) 值表示数值未知。空值不同于空白或零值。没有两个相等的空值。比较两个空值或将空值与任何其它数值相比均返回未知,这是因为每个空值均为未知。

空值通常表示未知、不可用或将在以后添加的数据。例如,客户的中间名首字母在客户下定单时可能不知道。

下面是有关空值的一些信息:

若要测试查询中的空值,请在 WHERE 子句中使用 IS NULL 或 IS NOT NULL。


在 SQL 查询分析器中查看查询结果时,空值在结果集内显示为 (null)。


可通过以下方法在列中插入空值:在 INSERT 或 UPDATE 语句中显式声明 NULL,或不使此列进入 INSERT 语句,或使用 ALTER TABLE 语句在现有表中新添一列。


不能将空值用于区分表中两行所需的信息(例如,外键或主键)。
在程序代码中,可以检查空值以便只在具有有效(或非空)数据的行上进行某些计算。例如,报表可以只打印社会安全列中数据不为空的列。执行计算时消除空值很重要,因为如果包含空值列,某些计算(如平均值)会不准确。

如果数据中可能包含空值,创建查询或数据修改语句消除空值或将空值转换成其它值是一个好办法(如果不想在数据中出现空值)。



重要 为了减少对已有查询或报表的维护和可能的影响,建议尽量少使用空值。对查询和数据修改语句进行规划,使空值的影响降到最小。


如果数据出现空值,则逻辑运算符和比较运算符有可能返回 TRUE 或 FALSE 以外的第三种结果 UNKNOWN。需要三值逻辑是导致许多应用程序出错之源。下面这些表概括了引入空值比较的效果。
sjw800614 2003-10-19
  • 打赏
  • 举报
回复
要使用=NULL 运算符,可以开启 SET ANSI_NULLS 被设置为 OFF ,的数据库默认设置
如果不开启则使用 ISNULL(),或者是IS NULL 语句来判断

希望没有误导你!!!
wzh1215 2003-10-19
  • 打赏
  • 举报
回复
在判断NULL值时不能直接用'='来判断,而应使用is null来判断

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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