Oce*_*lot 6 sql sql-server union select case
我想执行一个SELECT,它只在表中存在该列时才选择一个列值,否则显示为null.
这就是我目前正在做的事情:
SELECT TOP 10 CASE WHEN EXISTS
(SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA ='test' and TABLE_NAME='tableName' and COLUMN_NAME='columnName')
THEN columnName ELSE NULL END AS columnName
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
SELECT TOP 10 CASE WHEN
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA ='test' and TABLE_NAME='tableName' and COLUMN_NAME='columnName') >0
THEN columnName ELSE NULL END AS columnName
Run Code Online (Sandbox Code Playgroud)
如果列中存在列,则它们都能很好地工作.但是当列不存在时,它会给我错误:
列名称'columnName'无效
你可以这样写:
SELECT CASE WHEN EXISTS
(
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA ='test' and TABLE_NAME='tableName'
and COLUMN_NAME='columnName'
)
THEN
(
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA ='test' and TABLE_NAME='tableName'
and COLUMN_NAME='columnName'
)
ELSE
NULL
END
AS columnName
Run Code Online (Sandbox Code Playgroud)
编辑:如果您希望从表的列中选择前10个值(如果该列存在),则需要将动态查询编写为:
SELECT @columnVariable =
CASE WHEN EXISTS
(
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA ='test' and TABLE_NAME='tableName'
and COLUMN_NAME='columnName'
)
THEN
(
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA ='test' and TABLE_NAME='tableName'
and COLUMN_NAME='columnName'
)
ELSE
NULL
END
/* Build the SQL string one time.*/
SET @SQLString =
N'SELECT TOP 10 ' + @columnVariable+ '
FROM test.tableName ';
EXECUTE sp_executesql @SQLString
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12646 次 |
| 最近记录: |