急问:insert 的sql语句中怎么设一个字段为null值?

kathymf 2003-09-08 04:12:59
我的trigger中需要将对某表A添加的记录组成一个insert字符串,然后记录到一个日志表B中,那么如果添加A的记录中有某个字段为null,那么insert字符串就连不起来了,也为null,该怎么办呢?
CREATE TRIGGER tgA ON A
FOR insert
AS
declare @id varchar(1000),
@lev1Days varchar(1000),
@lev2Days varchar(1000),
@lev3Days varchar(1000),
@WorkTag varchar(200),
@Discrib varchar(200),
@strSql varchar(1000)



select @id =ad.id,@lev1Days=ad.lev1Days , @lev2Days=ad.lev2Days,@lev3Days=ad.lev3Days,@worktag=ad.worktag,@discrib=ad.discrib from A ad ,inserted i where ad.id=i.id


select @strSql = 'insert into A values(' + @id + ',' + @lev1days + ',' + @lev2days + ',' + @lev3days + ',''' + @worktag + ''',''' + @discrib + ''')'


begin

insert into B values (@strSql,getdate())
end
...全文
580 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
newly_ignorant 2003-09-08
  • 打赏
  • 举报
回复
简单点考虑,先Insert,只考虑ID

如果其他字段不为空,则更新
kathymf 2003-09-08
  • 打赏
  • 举报
回复
up一下,大家帮我解决一下呀
kathymf 2003-09-08
  • 打赏
  • 举报
回复
另:希望如果为null那么insert执行时也为null,都没有确省值
比如在enterprise里面,设置一个字段为null,ctrl+0就可以了,有没有类似的东东在sql语句里代替null,又可以用连接符相连的呢?
kathymf 2003-09-08
  • 打赏
  • 举报
回复
ISNULL(ad.id,'') 不可以,因为有的字段为日期类型,而且不希望有确省值
isnull(@lev3days,'null')也不可以,因为那样insert的语句组成后,我还需要执行这个insert语句,那样就会把null作为一个字符串放到字段里,而不是真正意义上的null
该怎么办哩?
:(
CrazyFor 2003-09-08
  • 打赏
  • 举报
回复
insert into table (col)values(NULL)
yujohny 2003-09-08
  • 打赏
  • 举报
回复
select @id =ISNULL(ad.id,''),@lev1Days=ISNULL(ad.lev1Days,'') ,
@lev2Days=ISNULL(ad.lev2Days,''),@lev3Days=ISNULL(ad.lev3Days,''),
@worktag=ISNULL(ad.worktag,''),@discrib=ISNULL(ad.discrib,'')
from A ad ,inserted i where ad.id=i.id
bitfubin 2003-09-08
  • 打赏
  • 举报
回复
is nill
waitwater 2003-09-08
  • 打赏
  • 举报
回复

CREATE TRIGGER tgA ON A
FOR insert
AS
declare @id varchar(1000),
@lev1Days varchar(1000),
@lev2Days varchar(1000),
@lev3Days varchar(1000),
@WorkTag varchar(200),
@Discrib varchar(200),
@strSql varchar(1000)



select @id =ad.id,@lev1Days=ad.lev1Days , @lev2Days=ad.lev2Days,@lev3Days=ad.lev3Days,@worktag=ad.worktag,@discrib=ad.discrib from A ad ,inserted i where ad.id=i.id


select @strSql = 'insert into A values(' + isnull(@id,'null') + ',' + isnull(@lev1days,'null') + ',' + isnull(@lev2days,'null') + ',' + isnull(@lev3days,'null') + ',''' + isnull(@worktag,'null') + ''',''' + isnull(@discrib,'null') + ''')'


begin

insert into B values (@strSql,getdate())
end
pengdali 2003-09-08
  • 打赏
  • 举报
回复
CREATE TRIGGER tgA ON A
FOR insert
AS
declare @id varchar(1000),
@lev1Days varchar(1000),
@lev2Days varchar(1000),
@lev3Days varchar(1000),
@WorkTag varchar(200),
@Discrib varchar(200),
@strSql varchar(1000)



select @id =isnull(ad.id,'null'),@lev1Days=isnull(ad.lev1Days,'null') , @lev2Days=isnull(ad.lev2Days,'null'),@lev3Days=isnull(ad.lev3Days,'null'),@worktag=isnull(ad.worktag,'null'),@discrib=isnull(ad.discrib,'null') from A ad ,inserted i where ad.id=i.id


select @strSql = 'insert into A values(' + @id + ',' + @lev1days + ',' + @lev2days + ',' + @lev3days + ',''' + @worktag + ''',''' + @discrib + ''')'


begin

insert into B values (@strSql,getdate())
end
pengdali 2003-09-08
  • 打赏
  • 举报
回复
CREATE TRIGGER tgA ON A
FOR insert
AS
declare @id varchar(1000),
@lev1Days varchar(1000),
@lev2Days varchar(1000),
@lev3Days varchar(1000),
@WorkTag varchar(200),
@Discrib varchar(200),
@strSql varchar(1000)



select @id =isnull(ad.id,'null'),@lev1Days=isnull(ad.lev1Days,'null') , @lev2Days=isnull(ad.lev2Days,'null'),@lev3Days=isnull(ad.lev3Days,'null'),@worktag=isnull(ad.worktag,'null'),@discrib=isnull(ad.discrib,'null') from A ad ,inserted i where ad.id=i.id


select @strSql = 'insert into A values(' + @id + ',' + @lev1days + ',' + @lev2days + ',' + @lev3days + ',''' + @worktag + ''',''' + @discrib + ''')'


begin

insert into B values (@strSql,getdate())
end
newly_ignorant 2003-09-08
  • 打赏
  • 举报
回复
如果都是字符,isnull(null,'')
yujohny 2003-09-08
  • 打赏
  • 举报
回复
select @id =ISNULL(ad.id,''),@lev1Days=ISNULL(ad.lev1Days,'') ,
@lev2Days=ISNULL(ad.lev2Days,''),@lev3Days=ISNULL(ad.lev3Days,''),
@worktag=ISNULL(ad.worktag,''),@discrib=ISNULL(ad.discrib,'')
from A ad ,inserted i where ad.id=i.id
伍子V5 2003-09-08
  • 打赏
  • 举报
回复
用isnull()函数解决呀

ISNULL
使用指定的替换值替换 NULL。

语法
ISNULL ( check_expression , replacement_value )

参数
check_expression

将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。

replacement_value

在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。

返回类型
返回与 check_expression 相同的类型。

注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。

示例
A. 将 ISNULL 与 AVG 一起使用
下面的示例查找所有书的平均价格,用值 $10.00 替换 titles 表的 price 列中的所有 NULL 条目。

USE pubs
GO
SELECT AVG(ISNULL(price, $10.00))
FROM titles
GO

下面是结果集:

--------------------------
14.24

22,210

社区成员

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

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