sql - 从表中获取列数据类型和一些条件
问题描述
我想要列数据类型,如果数据类型是 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'
解决方案
您可以直接使用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()
在数据类型为DATETIME
then时返回值
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;
推荐阅读
- r - R:错误:使用 RadAR 包时未为此 S4 类定义 $ 运算符
- cookies - 谷歌分析如何知道流量的来源?
- python - Python docx没有找到所有部分
- firebase - Flutter、Firebase、Google AI API 和欧盟 cookie 指令
- amazon-web-services - Cloudfront 路径映射提供内容而不是重定向?
- gerrit - Gerrit send underscore to Uploading Changes message
- c# - 如何根据条件过滤数据表并忽略大小写?
- r - 将R数据框中的矩阵列转换为多列
- python - 创建一个 python 脚本,它将在文本文件中搜索某个键并将数字复制到一个新文件中
- html - HTML/CSS/Javascript 中是否有“广播”方法?