让我们假设我有这个长插入语句
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等现在不是一个选项
答案 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, ...)
(显然你也需要declare
和set
/ 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)