SQL固定长度插入语句格式化程序

时间:2009-12-30 13:06:13

标签: sql sql-server oracle code-formatting

让我们假设我有这个长插入语句

insert into table1 (id, name, phone, very_long_col_name, ...) 
            values (1, 'very long name indeed...', '555-555-5555', 1, ...)

正如您在上面所看到的,由于长度不均匀,很难从列中分辨出值

我正在寻找一些东西(例如命令行util)来将上面的格式(不仅仅是SQL格式)格式化为:

insert into table1 (id, name                      , phone         , very_long_col_name, ...) 
            values (1 , 'very long name indeed...', '555-555-5555', 1                 , ...)

通过这种方式,我可以轻松地看到哪个值适合哪个列

它可以是一个插件来记事本++,一个java实用程序,一个SQL IDE的插件,这个诀窍......

准备好的语句,T-SQL参数,Hibernate,JPA等现在不是一个选项

7 个答案:

答案 0 :(得分:7)

不建议插件,但我大多看到这种格式化的方式:

insert into table1 
       (
         id, 
         name,
         phone, 
         very_long_col_name, 
         ...
       ) 
values 
       (
         1, 
         'very long name indeed...', 
         '555-555-5555', 
         1, 
         ...
       )

我发现这比滚动很长的一行更具可读性。

答案 1 :(得分:1)

最好的办法是使用SQL预处理语句。这使您可以将SQL查询语法与数据分开,因此您首先要准备语句:

$statement = mysqli_prepare("INSERT INTO `blah` (`id`,`phone`,`name`) VALUES(?,?,?)");

然后你数据绑定到语句:

$statement->bind('iss', 1234, "(555) 123-4567", "Kris");

我以PHP为例,上面代码中的'iss'表示它按顺序绑定了一个Int和2个字符串。

答案 2 :(得分:1)

您是否考虑过以下alternative syntax

INSERT INTO `table` SET
    `id` = 1,
    `name` = 'very long name indeed...',
    `phone` = '555-555-5555',
    `very_long_col_name` = 1,
    `...` = '...'
;

答案 3 :(得分:1)

如果包含您的SQL语句的地方包含您要插入的DATA,那么您很可能正在做一些非常非常错误的事情。

你想要达到什么目的?是否要格式化查询,以便您可以将其转储为漂亮的样式以进行调试?嗯,这很简单,只需在代码中的适当位置添加strlen(some_string)-some_fixed_number个空格。我不能在这里建议实际的代码,因为我不知道你使用的语言或你喜欢的编码风格等等......

但即使我想,我也没有看到任何价值。您应该将SQL查询与您在SQL查询中使用的数据(例如,用于插入)分开。

由于一些非常好的理由(引用,sql注入等等),动态构建SQL查询字符串已经过时了。

编辑:如果要格式化SQL转储或某些准备数据库的INSERT语句,则可以使用CSV格式的数据。它比SQL语句更容易阅读。

答案 4 :(得分:1)

变量?

insert into
table1 ( id,  name,  phone,  very_long_col_name, ...) 
values (@id, @name, @phone, @long_val, ...)

(显然你也需要declareset / select这些

答案 5 :(得分:1)

在Oracle中(因为我们可以从双重中选择)我喜欢将它们变成insert into select from所以我可以对列进行别名并使其更易于阅读:

insert into table1 
(
 id, 
 name, 
 phone, 
 very_long_col_name,
 ...
) 
select 1 id, 
       'very long name indeed...' name, 
       '555-555-5555' phone, 
       1 very_long_col_name, 
       ...
  from dual;       

答案 6 :(得分:0)

我想要同样的东西,所以我构建了这个javascript工具:

SQL Insert Formatter

它完全符合您的要求并处理多个语句。它只是客户端,因此无需担心您的数据被上传。