SQL Server从表中选择数据而不知道列名

时间:2014-05-08 14:06:36

标签: sql sql-server

这是样本数据表。

enter image description here

我想在列名中选择任意行或任何列(等于)= 200的值。但我们不知道列名

2 个答案:

答案 0 :(得分:3)

如果您知道表名,则可以使用SQLServer 2005或更高版本查询INFORMATION_SCHEMA.TABLESINFORMATION_SCHEMA.COLUMNS,或者使用SQLServer查询sysobjectssyscolumns 2000检索表列,之后您可以根据需要创建完全引用的查询

答案 1 :(得分:1)

我认为下面的T-SQL可以满足您的需求。它是针对AdventureWorks2012LT编写的。将来,您可以通过在问题中包含SQL create语句来获得更具体的帮助(因此响应者不必重新创建表) (顺便说一句,我的例子是寻找包含字母' S')

的任何字段
DECLARE @column_name nvarchar(200);
DECLARE @statement nvarchar(max);

DECLARE @results TABLE(
id int,
colname nvarchar(200),
value nvarchar(max)
)

DECLARE col_cursor CURSOR FOR
SELECT C.COLUMN_NAME AS col
FROM INFORMATION_SCHEMA.COLUMNS C WHERE C.TABLE_NAME LIKE 'Address'

OPEN col_cursor
FETCH NEXT FROM col_cursor INTO @column_name

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @column_name
SELECT @statement = N'SELECT AddressID, ''' + @column_name + ''' AS ColName, ' + @column_name + ' AS value FROM SalesLT.[Address] WHERE ' + @column_name + ' LIKE ''%S%''';

INSERT INTO @results
EXEC(@statement);

FETCH NEXT FROM col_cursor INTO @column_name
END

CLOSE col_cursor
DEALLOCATE col_cursor

SELECT * FROM @results