我有一张桌子(订单)。用于在表顺序中插入数据的表单包含一些选项字段。这意味着某些字段可能包含数据或为空。 我已经在数据库中将这些字段设置为“可空”。
我想编写一个sql查询,例如:
(如果:data不为null,insert:data else insert null)。
:此处的数据是提交表单中字段的值。
我已经尝试过IFNULL,ISNULL但似乎无法正常工作,因为我遇到了一些错误,例如“×无法执行SQL语句:您的SQL语法出错;请查看与您的MySQL服务器版本对应的手册,以获得正确的语法靠近......“
我怎么写这样的查询?
修改
来自Modather Sadik的查询
insert into [table] (data) Values ((CASE WHEN @d IS NULL OR datalength(@d) = 0 THEN NULL ELSE @d END))
该查询对应于我想要实现的目标。我试过这个:
INSERT INTO commande
VALUES (
null,
:date_ajout,
CASE WHEN :etat_commande IS NULL OR datalength(:etat_commande) = 0 THEN NULL ELSE :etat_commande END,
CASE WHEN :lieu_commande IS NULL OR datalength(:lieu_commande) = 0 THEN NULL ELSE :lieu_commande END,
CASE WHEN :rappel IS NULL OR datalength(:rappel) = 0 THEN NULL ELSE :rappel END,
CASE WHEN :avec_avance IS NULL OR datalength(:avec_avance) = 0 THEN NULL ELSE :avec_avance END,
CASE WHEN :article_nom IS NULL OR datalength(:article_nom) = 0 THEN NULL ELSE :article_nom END,
CASE WHEN :article_reference IS NULL OR datalength(:article_reference) = 0 THEN NULL ELSE :article_reference END,
CASE WHEN :article_quantite IS NULL OR datalength(:article_quantite) = 0 THEN NULL ELSE :article_quantite END,
CASE WHEN :article_prix IS NULL OR datalength(:article_prix) = 0 THEN NULL ELSE :article_prix END,
CASE WHEN :article_description IS NULL OR datalength(:article_description) = 0 THEN NULL ELSE :article_description END,
CASE WHEN :article_site_web IS NULL OR datalength(:article_site_web) = 0 THEN NULL ELSE :article_site_web END,
CASE WHEN :article_image1 IS NULL OR datalength(:article_image1) = 0 THEN NULL ELSE :article_image1 END,
CASE WHEN :article_image2 IS NULL OR datalength(:article_image2) = 0 THEN NULL ELSE :article_image2 END,
CASE WHEN :id_transporteur IS NULL OR datalength(:id_transporteur) = 0 THEN NULL ELSE :id_transporteur END,
:id_employe,
CASE WHEN :id_client IS NULL OR datalength(:id_client) = 0 THEN NULL ELSE :id_client END,
CASE WHEN :id_fournisseur IS NULL OR datalength(:id_fournisseur) = 0 THEN NULL ELSE :id_fournisseur END,
CASE WHEN :date_depart_livraison IS NULL OR datalength(:date_depart_livraison) = 0 THEN NULL ELSE :date_depart_livraison END,
CASE WHEN :date_livraison IS NULL OR datalength(:date_livraison) = 0 THEN NULL ELSE :date_livraison END,
CASE WHEN :montant_avance IS NULL OR datalength(:montant_avance) = 0 THEN NULL ELSE :montant_avance END,
CASE WHEN :mode_paiement IS NULL OR datalength(:mode_paiement) = 0 THEN NULL ELSE :mode_paiement END,
CASE WHEN :etat_paiement IS NULL OR datalength(:etat_paiement) = 0 THEN NULL ELSE :etat_paiement END,
CASE WHEN :prix_achat IS NULL OR datalength(:prix_achat) = 0 THEN NULL ELSE :prix_achat END,
CASE WHEN :prix_de_vente IS NULL OR datalength(:prix_de_vente) = 0 THEN NULL ELSE :prix_de_vente END,
CASE WHEN :montant_a_payer IS NULL OR datalength(:montant_a_payer) = 0 THEN NULL ELSE :montant_a_payer END,
CASE WHEN :frais_livraison IS NULL OR datalength(:frais_livraison) = 0 THEN NULL ELSE :frais_livraison END,
CASE WHEN :infos_frais IS NULL OR datalength(:infos_frais) = 0 THEN NULL ELSE :infos_frais END,
CASE WHEN :benefice IS NULL OR datalength(:benefice) = 0 THEN NULL ELSE :benefice END
);
但我有这个错误:
Cannot execute SQL statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':article_image1 IS NULL OR datalength(:article_image1) = 0 THEN NULL ELSE :artic' at line 15
答案 0 :(得分:1)
您是否正在寻找在特定列中数据不为空时将插入的插入?
insert into orders
select col1, col2, col3
from srctable
where col3 is not null
答案 1 :(得分:1)
尝试以下
insert into [table] (data) Values ((CASE WHEN @d IS NULL OR datalength(@d) = 0 THEN NULL ELSE @d END))
此查询检查值是否为null或为空,如果是,则它将插入null,否则将插入已发送的值。
肯定@d将从您的表单中填充为参数。
答案 2 :(得分:0)
不建议写这样的查询。
定义变量
var x;
if data is null
x= null
else
x = data
然后将变量x传递给sql语句。
答案 3 :(得分:-1)
(if :data is not null, insert :data else insert null)
数据是什么意思,是表值还是所有值。
如果是某个表值,只需直接插入数据,可以为空的值在db中为空。