SQL 列名通配符

SQL Column Name wildcard

我有一个包含 30 多个字段的 table,我想快速将我的选择范围缩小到列名以 'Flag' 开头的所有字段。

select * Like Flag% from Table1

您需要按照此处的说明构建动态查询:

SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'Foods'
        AND table_schema = 'YourDB'
        AND column_name LIKE 'Vegetable%'

这个SQL声明应该有用。您也许可以简化它,但它确实有效。

Edit2:我刚刚看到你的 pervasive-sql 标签。不幸的是,我从未使用过它,也不知道语法是否与 MS SQL Server 兼容。我会在这里回答以防对其他人有帮助,但我想分享一下我使用 SQL Server.

测试过的内容

编辑:SCHEMA_NAME 函数不是必需的。如果需要,您可以用单引号中的模式名称替换 SCHEMA_NAME(schema_id),但两者都可以。

 SELECT t.name AS table_name,
      SCHEMA_NAME(schema_id) AS schema_name,
      c.name AS column_name
 FROM 
     sys.tables AS t
 INNER JOIN 
     sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
 WHERE 
      t.name = 'Table1' AND
      c.name Like 'Flag%'
 ORDER BY 
     c.name

 SELECT t.name AS table_name,
      'MySchema' AS schema_name,
      c.name AS column_name
 FROM 
     sys.tables AS t
 INNER JOIN 
     sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
 WHERE 
      t.name = 'Table1' AND
      c.name Like 'Flag%'
 ORDER BY 
     c.name

为此,您需要在系统 table 中查询与 table 关联的列,并将它们过滤为您想要的内容。从那里,将它们放入变量 table 并创建列的 CSV。从那里,您可以根据需要动态构建查询。下面的示例应该可以帮助您入门。

DECLARE @tableName VARCHAR(100) = 'dbo.SomeTable'
DECLARE @columnNames TABLE
(
    Id INT IDENTITY PRIMARY KEY,
    ColumnName VARCHAR(100)
)

--Grabs all of the columns into a variable table
INSERT INTO @columnNames (ColumnName)
SELECT
    [name]
FROM sys.columns
WHERE
    [object_id] = OBJECT_ID(@tableName)
AND
    [name] LIKE '%Flag'

DECLARE @columns VARCHAR(1000)

--Creates a CSV of columns
SET @columns =
    STUFF(
    (
        SELECT
            ',' + ColumnName
        FROM @columnNames
        FOR XML PATH(''))
    ,1,1,'')

DECLARE @selectStatement NVARCHAR(4000) = CONCAT('SELECT ', @columns, ' FROM ', @tableName)

PRINT @selectStatement
EXEC @selectStatement