[英]SQL Server Select data from table without knowing column names
This is sample data table. 这是样本数据表。
I want to select values in any rows or any column (equals) = 200 with column names.But we don't know column names . 我想选择任何具有行名的行或任何列(等于)= 200的值。但是我们不知道列名 。
如果您知道表名,则可以使用SQLServer 2005或更高版本查询INFORMATION_SCHEMA.TABLES
和INFORMATION_SCHEMA.COLUMNS
,或者使用SQLServer 2000来查询sysobjects
和syscolumns
来检索表列,之后,您可以根据需要创建完全引用的查询
I think the below T-SQL will get you what you want. 我认为下面的T-SQL将为您提供所需的东西。 It was written against AdventureWorks2012LT. 它是针对AdventureWorks2012LT编写的。 In the future, you can get more specific help by including the SQL create statements with your question (so the responder doesn't have to recreate the tables) (BTW, My example is looking for any field that contains the letter 'S') 将来,您可以通过在问题中包含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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.