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
我有一个包含 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