SQL 架构和值

标签 sql sql-server

我想要执行一个 select 语句。我要选择

SELECT COLUMN_NAME AS FieldName FROM   
INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'table1'

但是我想创建另一个名为 Value 的列,它是 table1 中的特定行 所以我有列名和相应的单个值的行。关于如何解决这个问题有什么想法吗?

最佳答案

以下查询为每列生成一个值(最小值):

    SELECT '''select '+COLUMN_NAME+''' AS FieldName, (select cast(MIN('+COLUMN_NAME+') as varchar(8000)) from '+const.tablename+')'
    FROM INFORMATION_SCHEMA.COLUMNS c cross join
         (select 'AllCurveNames' as tablename) const
    WHERE c.TABLE_NAME = const.tablename

但是,这会为每一行生成一个单独的查询。要将它们组合在一起,您需要一个字符串聚合串联。这是在 SQL Server 中执行此操作的方法:

    declare @sql varchar(max);

    SELECT @sql = (select 'select '''+COLUMN_NAME+''' AS FieldName, (select cast(MIN('+COLUMN_NAME+') as varchar(8000)) from '+const.tablename + ') union all '
                   FROM INFORMATION_SCHEMA.COLUMNS c cross join
                        (select WHATEVER as tablename) const
                   WHERE c.TABLE_NAME = const.tablename
                   for xml path('')
                  );
    select @sql = LEFT(@sql, len(@sql) - 9);
    exec(@sql);

关于SQL 架构和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741074/

相关文章:

sql - 在 Presto 中压缩数组

sql - 将Google Analytics(分析)与外部数据结合

PHP/MySQL SET var = var - var

sql - 将 [每行一个单词] 与 [每行多个单词] 的短语行连接起来

mysql - T-sql查询问题

sql - 对于两个日期之间的每一天,添加一行包含相同的信息,但仅在开始/结束列中添加当天

SQL 更新查询

sql-server - 存储过程比对数据库使用 LINQ 更安全吗?

非唯一列上的 SQL Server 聚集索引

sql-server - 根据开始日期和结束日期创建唯一约束