Возможное это будет полезно для вас -
Запрос:
IF OBJECT_ID (N'dbo.bb_match') IS NOT NULL
DROP TABLE dbo.bb_match
CREATE TABLE dbo.bb_match (seek_id INT, prov_id INT)
INSERT INTO dbo.bb_match (seek_id, prov_id)
VALUES (6, 1), (2, 6)
DECLARE
@ColumnID TINYINT
, @Value INT
, @TableName SYSNAME
, @SQL NVARCHAR(500)
SELECT
@ColumnID = 1
, @Value = 6
, @TableName = 'dbo.bb_match'
SELECT @SQL = 'SELECT * FROM ' + @TableName + ' WHERE [' + c.name + '] = ' + CAST(@Value AS NVARCHAR(MAX))
FROM sys.objects o WITH (NOWAIT)
JOIN sys.schemas s WITH (NOWAIT) ON o.[schema_id] = s.[schema_id]
JOIN sys.columns c WITH (NOWAIT) ON o.[object_id] = c.[object_id]
WHERE o.[type] = 'U' -- <-- only for tables columns
AND s.name + '.' + o.name = @TableName
AND c.column_id = @ColumnID
PRINT @SQL
EXEC sp_executesql @SQL
Более короткий, но небезопасный (sys.columns содержит column_name для таблиц, представлений, процедур, ...):
SELECT @SQL = 'SELECT * FROM ' + @TableName + ' WHERE [' + c.name + '] = ' + CAST(@Value AS NVARCHAR(MAX))
FROM sys.columns c WITH (NOWAIT)
WHERE c.[object_id] = OBJECT_ID(@TableName)
AND c.column_id = @ColumnID
EXEC sys.sp_executesql @SQL
Выход:
SELECT * FROM dbo.bb_match WHERE [seek_id] = 6
Результаты:
seek_id prov_id
----------- -----------
6 1
Вы не можете это сделать - SQL Server нуждается в имени столбца - он не может использовать порядковое положение для ссылки на столбец в таблице –
Возможно, вы сможете использовать некоторые динамические SQL-запросы sys.columns, чтобы найти первый столбец – Jaloopa
, который вы можете использовать используйте поле ordinal_position в таблице INFORMATION_SCHEMA.COLUMNS, чтобы найти первый столбец данной таблицы. – Maximus