如何对sql语句的参数赋空值(null).(50分)

  • 主题发起人 主题发起人 jacaboos
  • 开始时间 开始时间
J

jacaboos

Unregistered / Unconfirmed
GUEST, unregistred user!
语句如下:
insert into xxx values(:p1,:p2.......,:pn,......);
...
if edit1.text<>'' then
query1.params[n].asdatetime := strtodate(edit1.text)
else
???
(想对pn这个参数赋值null,实现以下语句的效果。
insert into xxx values(:p1,:p2,......,null,......);
 
insert into xxx values(:p1,:p2,......,'',......);
 
if edit1.text<>'' then
query1.params[n].asdatetime := strtodate(edit1.text)
就行了
 
楼上的 肯定是不行的
if edit1.text<>'' then
query1.params[n].asdatetime := strtodate(edit1.text)
else
query1.params[n].asstirng:='';
 
query1.params[n].clear;
 
to:雪中漫步
用你的方法,系统将会把默认值(1900-1-1)赋给参数
to:yzhshi,pearl
你们的方法等同于,
insert into xxx values(:p1,:p2.......,:pn-1,:pn+1,......);
这样sql服务器将会报错。
 
在SQL7中,是可以在INSERT 语句中用NULL的!
 
insert into abc values (field1,field2,field3=
case
when edit1.text<>'' then
field3
else
null
end
)
 
同意楼上的!
 
insert into abc values (field1,field2,field3=
case
when edit1.text<>'' then
field3
else
null
end
)
可以在query.sql中直接这样写吗?
 
直接写null.
但用if then else要不得
建议改
if edit1.text<>'' then
query1.params[n].asdatetime := strtodate(edit1.text) //不一定不用空就是合法日期
else
....
try
query1.params[n].asdatetime := strtodate(edit1.text);
except
...
end;
 
>>>>>>to:yzhshi,pearl
>>>>>> 你们的方法等同于,
>>>>>> insert into xxx values(:p1,:p2.......,:pn-1,:pn+1,......);

不要想当然哦
params[n].clear等同于将params[n]的value置为null, 并不是params.delete(n)
 
query.params.items[0].AsString := '';
其他一样
 
干吗就非得是parames[n].as...
不可以是params[n].valuse := null;
 
to pearl:
params[n].clear就是params.delete(n),请用实例测试。

关于这个问题,我想到了另外一个相关的问题:
在SQL中,DateTime字段是否允许赋null值。我试过,虽然在结构设计时,
设计为允许null,但是在输入数据时,却不能输入null.
 
在insert记录时,如果字段允许为空且没有设缺省值的话,这时当在insert中不对该字段赋值,则
它的值自动设为null
 
insert into table a (1,2,3)
values('x','x','x')
在ORACLE中,你可以设置你想要插入的字段,不写就不插入
 
if edit1.text<>'' then
insert into xxx f1,f2,f3.. values(p1,p2,p3..);
else
insert into xxx f1,f3.. values(p1,p3..);

当为空时 p2可不写
 
后退
顶部