首页 > 解决方案 > 从表中获取列数据类型和一些条件

问题描述

我想要列数据类型,如果数据类型是 int,则显示列名,如果 varchar,则在水平线外星人中显示带有 '' 的列名

我尝试了类似但不知道如何应用条件的方法:

SELECT 
    t.Name 'Data type'
FROM    
    sys.columns c
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id
    where object_id = OBJECT_ID('tbl_Check_Sql_Query') 

假设我的列有数据类型

id int 
name varchar 
Email_ID varchar 

那我想要

id,'name','Email_ID'

标签: sqlsql-serversql-server-2012

解决方案


您可以直接使用INFORMATION_SCHEMA.COLUMNS系统视图作为

SELECT TABLE_NAME,
       CASE DATA_TYPE WHEN 'INT' THEN COLUMN_NAME
                      --WHEN 'VARCHAR' I don't know what you mean by "in horizontal line alien"
       END
FROM INFORMATION_SCHEMA.COLUMNS;
--WHERE TABLE_NAME = 'TableName'

或者

SELECT TABLE_NAME,
       STRING_AGG(CASE WHEN DATA_TYPE = 'VARCHAR'
                       THEN QUOTENAME(COLUMN_NAME, '''')
                       ELSE COLUMN_NAME
                  END, ',') Columns
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY TABLE_NAME;
--WHERE TABLE_NAME = 'TableName'

演示

或者

SELECT TABLE_NAME,
       STUFF(
         (SELECT ',' + CASE WHEN DATA_TYPE = 'VARCHAR' 
                            THEN QUOTENAME(COLUMN_NAME, '''')
                            ELSE COLUMN_NAME
                       END
          FROM INFORMATION_SCHEMA.COLUMNS T2
          WHERE T1.TABLE_NAME = T2.TABLE_NAME
          FOR XML PATH('')

         ), 1, 1, ''
       ) Columns
FROM INFORMATION_SCHEMA.COLUMNS T1
GROUP BY TABLE_NAME;

第二次演示


更新:

由于您试图GETDATE()在数据类型为DATETIMEthen时返回值

SELECT TABLE_NAME,
       STUFF(
         (SELECT ',' + CASE DATA_TYPE WHEN 'VARCHAR' 
                                          THEN QUOTENAME(COLUMN_NAME, '''')
                                      WHEN 'DATETIME'
                                          THEN 'GETDATE()'
                            ELSE COLUMN_NAME
                       END
          FROM INFORMATION_SCHEMA.COLUMNS T2
          WHERE T1.TABLE_NAME = T2.TABLE_NAME
          FOR XML PATH('')

         ), 1, 1, ''
       ) Columns
FROM INFORMATION_SCHEMA.COLUMNS T1
GROUP BY TABLE_NAME;

推荐阅读