Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 信息\u SCHEMA.COLUMNS从结果中删除列名_Sql_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

Sql 信息\u SCHEMA.COLUMNS从结果中删除列名

Sql 信息\u SCHEMA.COLUMNS从结果中删除列名,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我有以下疑问: USE db183 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'SCHEDULE_%' OR COLUMN_NAME LIKE 'EMPINFO_%' OR COLUMN_NAME LIKE 'AVAIL_%' OR COLUMN_NAME LIKE 'TRAINING_%' ORDER BY CASE WHEN COLU

我有以下疑问:

USE db183
SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'SCHEDULE_%' 
   OR COLUMN_NAME LIKE 'EMPINFO_%' 
   OR COLUMN_NAME LIKE 'AVAIL_%' 
   OR COLUMN_NAME LIKE 'TRAINING_%' 
ORDER BY 
    CASE
        WHEN COLUMN_NAME LIKE 'SCHEDULE_%' THEN 0  
        WHEN COLUMN_NAME LIKE 'EMPINFO_%' THEN 1 
        WHEN COLUMN_NAME LIKE 'AVAIL_%' THEN 2 
        WHEN COLUMN_NAME LIKE 'TRAINING_%' THEN 3
    END, ORDINAL_POSITION ASC
我不想包括列名EMPINFO_empName

但是,在尝试此操作时:

USE db183
SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'SCHEDULE_%' 
   OR COLUMN_NAME LIKE 'EMPINFO_%' 
   OR COLUMN_NAME LIKE 'AVAIL_%' 
   OR COLUMN_NAME LIKE 'TRAINING_%' 
   AND NOT COLUMN_NAME LIKE '%_empName' /*<-- NEW ADDED CODE HERE */
ORDER BY 
    CASE
        WHEN COLUMN_NAME LIKE 'SCHEDULE_%' THEN 0  
        WHEN COLUMN_NAME LIKE 'EMPINFO_%' THEN 1 
        WHEN COLUMN_NAME LIKE 'AVAIL_%' THEN 2 
        WHEN COLUMN_NAME LIKE 'TRAINING_%' THEN 3
    END, ORDINAL_POSITION ASC
似乎没有去掉那个特定的列名——它仍然像第一个查询一样列在输出中


我猜我有一些语法不正确,但我没有发现任何错误。

您需要在LIKE语句中转义下划线:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'SCHEDULE[_]%' OR
      COLUMN_NAME LIKE 'AVAIL[_]%' OR
      COLUMN_NAME LIKE 'TRAINING[_]%' OR
      (COLUMN_NAME LIKE 'EMPINFO[_]%' AND COLUMN_NAME NOT LIKE '%[_]empName%')
实际上,如果您真的只想排除单个列,则只需使用全名:

WHERE COLUMN_NAME <> 'EMPINFO_empName'

您需要在LIKE语句中转义下划线:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'SCHEDULE[_]%' OR
      COLUMN_NAME LIKE 'AVAIL[_]%' OR
      COLUMN_NAME LIKE 'TRAINING[_]%' OR
      (COLUMN_NAME LIKE 'EMPINFO[_]%' AND COLUMN_NAME NOT LIKE '%[_]empName%')
实际上,如果您真的只想排除单个列,则只需使用全名:

WHERE COLUMN_NAME <> 'EMPINFO_empName'
这不仅仅是关于模式的信息

这不仅仅是关于模式的信息


仍然显示在查询结果doing和COLUMN\u NAME中,与“%[\u]empName%”不同,奇怪的是,doing COLUMN\u NAME“EMPINFO\u empName”也不会删除它!再试一次。您需要在列名中的所有下划线周围使用括号。@Alex Kudryashev说得对,但也谢谢您@严格地说,TimBiegeleisen应该转义为[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\!再试一次。您需要在列名中的所有下划线周围使用括号。@Alex Kudryashev说得对,但也谢谢您@严格地说,TimBiegeleisen应该转义为[\uu],但您的布尔分组是错误的。就是这样!谢谢亚历克斯!真正的问题是和或之间的优先顺序。在条件周围使用parens允许我们覆盖默认的优先顺序。我们还应该指出,下划线字符在类似条件下是通配符。该下划线将匹配任何一个字符。这与2+3*4与2+3*4相同。您确定此查询符合您的想法吗?这些下划线不会被解释为通配符吗?@TimBiegeleisen在这种情况下,只要不包含列EMPINFO2empName,就无所谓了。正确的代码应该类似于完成此操作的“%[[u]empName”!谢谢亚历克斯!真正的问题是和或之间的优先顺序。在条件周围使用parens允许我们覆盖默认的优先顺序。我们还应该指出,下划线字符在类似条件下是通配符。该下划线将匹配任何一个字符。这与2+3*4与2+3*4相同。您确定此查询符合您的想法吗?这些下划线不会被解释为通配符吗?@TimBiegeleisen在这种情况下,只要不包含列EMPINFO2empName,就无所谓了。正确的代码应类似于“%[[uu]empName”