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
Sql server 为可读性命名Value子句中的项目_Sql Server_Tsql - Fatal编程技术网

Sql server 为可读性命名Value子句中的项目

Sql server 为可读性命名Value子句中的项目,sql-server,tsql,Sql Server,Tsql,是否有更好的方法将值中的项映射到列名。我总是通过评论来做到这一点: insert into Table1 (Col1, Col2, ..., Coln) values ('One' /* Col1 */, 'Two' /* Col2 */, ..., 'ValN' /* Coln */); 当涉及到许多列并且values子句中包含查询时,这一点变得尤为重要。我总是要数一数,看看values子句中的哪个项目对应于哪个列。因此,我只使用如上所示的注释。我将陈述一个显而易见的事实,根据查询的不同,有

是否有更好的方法将
值中的项映射到列名。我总是通过评论来做到这一点:

insert into Table1 (Col1, Col2, ..., Coln)
values ('One' /* Col1 */, 'Two' /* Col2 */, ..., 'ValN' /* Coln */);
当涉及到许多列并且values子句中包含查询时,这一点变得尤为重要。我总是要数一数,看看
values
子句中的哪个项目对应于哪个列。因此,我只使用如上所示的注释。我将陈述一个显而易见的事实,根据查询的不同,有时我可能会将它们放在单独的行中


还有别的办法吗?

你的办法不错。我通常每列用一行。它可以很长,但我觉得它更可读。大概是这样的:

insert into Table1 (
 Col1 
,Col2 
,...
,Coln
)
values (
 One  /* Col1 */ 
,Two  /* Col2 */ 
,... 
,ValN /* Coln */
);
在某些情况下,使用JSON字符串可能很有用。在其他情况下,这可能是杀伤力过大。下面是一个简单的例子:

假设我们有一个名为“test”的表,有两列:“Number”(INT)和“Word”(VARCHAR(40))

我们可以使用以下构造在该表中插入记录:

INSERT INTO test (Number, Word)
  SELECT source.Number, source.Word
  FROM
  (
  SELECT  Number, Word
      FROM
      OpenJson('[{
    "number": 01,  "word": "This"
  }, {
    "number": 02,  "word": "Is"
  }, {
    "number": 03,  "word": "Just"
  }, {
    "number": 04,  "word": "a"
  }, {        
    "number": 05,  "word": "Test"
  }] '
  ) WITH (Number INT '$.number', Word VARCHAR(40) '$.word') 

  ) AS source
我们可以看到:

  • 要插入的数据存储在JSON字符串中。然后,我们使用表中相同的列名在JSON字符串中命名每个属性
  • 在执行实际插入时,要插入的值的名称是与其列同名的变量,因此非常可读。(source.Number,source.Word)

  • 在某些情况下,使用JSON字符串不仅可以帮助映射数据及其列,还可以调试数据并找到错误的值。

    。我正在寻找另一种方法,如果有的话,如问题所示。是的,我刚刚添加了另一种方法,使用JSON字符串作为数据源。在某些情况下,这种方法可以工作,并有助于可读性和调试。@对查询复杂度变量(@)进行编码可以提高可读性/可发现性。明显地在某些情况下,这种方法会使TSQL更加复杂。我同意,我也尝试这样做。通常,如果我迫不及待地想在
    VALUES
    子句中标记项目,因为没有它不清楚,那么我就用
    SELECT
    替换它,而不使用
    FROM
    作为
    SELECT
    中的值列别名。如果有多行,则需要将它们与
    UNION ALL
    组合。类似于Martin的方法
    INSERT INTO t1(co1,CO2..)从(值('One','Two')中选择*作为D(Col1,col2)使用包装值并提供显式列名。@martinsmith这是一个很好的提示!我一定会用上的。谢谢分享:)