我经常要处理别人写的sql。一个典型的sql插入语句可以包含5-6个非种子值(NULL(。
一个例子:
INSERT INTO Texts (Text_EN, Text_NO, Text_DK, Text_SV) VALUES ('English', NULL, NULL, 'Svenska')
我一直在寻找一种方法来将这样的行转换为:
INSERT INTO Texts (Text_EN, Text_SV) VALUES ('English', 'Svenska')
所以我想完成的是:
- 查找NULL值
- 查找与这些值对应的列
- 删除这些值和列名
我一直在尝试各种具有正lookbehinds的正则表达式,因为我认为我需要先找到NULL,但没有骰子。也许已经有另一种方法了?
我也一直在检查sql格式化程序,但它们似乎没有这个特定的功能。
您可以通过使用动态SQL来实现。例如,为2个输入数组类型参数写入函数。其中一个数组用于字段,另一个数组则用于值。在函数内部,您可以为动态sql声明两个字符串类型的变量,并使用一个用于循环操作。在此循环中,通过if操作检查值。如果值为null,则不要添加到字符串值和字段中,否则添加。将循环设置为主字符串变量"insert into table"后,执行动态SQL。简短示例:
declare
v_sql varchar(1000);
v_fields varchar(1000);
v_valuesm varchar(1000);
begin
-- for-loop statement
-- if check generate striong variables for fiedls and values
-- end of for-loop statement
v_sql = 'INSERT INTO Texts (' + v_fields + ') VALUES (' + v_values + ')';
-- executing your v_sql