Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL固定长度插入语句格式化程序_Sql_Sql Server_Oracle_Code Formatting - Fatal编程技术网

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

SQL固定长度插入语句格式化程序,sql,sql-server,oracle,code-formatting,Sql,Sql Server,Oracle,Code Formatting,假设我有一个长insert语句 insert into table1 (id, name, phone, very_long_col_name, ...) values (1, 'very long name indeed...', '555-555-5555', 1, ...) 正如您在上面所看到的,由于值的长度是不均匀的,所以很难从它们的列中区分值 我正在寻找一些东西,例如命令行util,来将上述内容格式化,而不仅仅是SQL格式: insert into tabl

假设我有一个长insert语句

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                 , ...)
这样我可以很容易地看到哪个值与哪个列相匹配

它可以是notepad++的插件、java实用程序、SQL IDE的插件,到底有什么诀窍


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

不建议使用插件,但我通常认为这种东西的格式是这样的:

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

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

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

$statement = mysqli_prepare("INSERT INTO `blah` (`id`,`phone`,`name`) VALUES(?,?,?)");
$statement->bind('iss', 1234, "(555) 123-4567", "Kris");
然后将数据绑定到语句:

$statement = mysqli_prepare("INSERT INTO `blah` (`id`,`phone`,`name`) VALUES(?,?,?)");
$statement->bind('iss', 1234, "(555) 123-4567", "Kris");
我以PHP为例,上面代码中的“iss”表示它正按顺序绑定一个Int和两个字符串。

您考虑过以下内容吗


如果包含SQL语句的位置包含要插入的数据,那么您很可能做了非常非常错误的事情

你想要实现什么?是否要格式化查询,以便以一种漂亮的方式转储它以进行调试?这很简单,只需在代码的适当位置添加strlensome_string-some_fixed_number个空格。我不能在这里建议实际的代码,因为我不知道您使用什么语言或您喜欢什么编码风格等等

但即使我想,我也看不出这有什么价值。您应该将SQL查询和SQL查询中使用的数据分开,例如用于插入的数据

由于引用、SQL注入等原因,动态构建SQL查询字符串已经过时了

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

变量

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

显然,您也需要在Oracle中声明和设置/选择这些

,因为我们可以从dual中选择我喜欢将它们插入到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;       

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


它完全按照您的要求执行,并处理多个语句。它仅用于客户端,因此无需担心数据被上传。

对于包含大量列的表,我还将在每个值后面添加列名称的注释。例如:1,-id由于没有提出更好的解决方案,这是公认的答案。感谢Oded…这不是sql的有效sql语法-Server@Oded:由于他没有提到任何特定的数据库,我猜想他使用的是MySQL。无论如何,我正确地标记了这个问题。在我们的代码中,我们使用Hibernate而不是普通SQL,在更糟糕的情况下,我们使用准备好的语句,但这是出于各种原因使用的-例如数据库创建、模拟数据、开发集成等。Oracle SQL Developer或Microsoft SQL Server Management StudioNice方法,但是请看我对frunsi的评论,查询的当前结构是给定的,我不能更改它,我只想看清楚。我仍然喜欢接受的答案。另外,请不要垃圾发送sqlhelp标签。这会导致使用以下函数正确格式化查询:插入[dbo].[Superheros]名称、日期、HomePlanet值N'Kent、Clark',getDate、N'Krypton',33;