Подстановочный знак имени столбца SQL
У меня есть таблица с 30+ полями, и я хочу быстро сузить выбор до всех полей, где имя столбца начинается с "Флаг".
select * Like Flag% from Table1
3 ответа
Вы захотите создать динамический запрос, как описано здесь: /questions/13894503/vyidelite-vse-stolbtsyi-kotoryie-nachinayutsya-s-xxx-ispolzuya-podstanovochnyij-znak/13894523#13894523
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
Для этого вам потребуется запросить системные таблицы для столбцов, связанных с таблицей, и отфильтровать их по вашему желанию. Оттуда поместите их в таблицу переменных и создайте 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