【发布时间】:2021-01-18 09:15:09
【问题描述】:
我想选择所有不包含模式“acc”的列。
这段代码是我写的
select (
select COLUMN_NAME from information_schema.columns
where table_name='output_bba'
and column_name not like 'acc%')
from ifrs17.output_bba
但我收到此错误消息:
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
你在上面到底想做什么,子查询似乎就是你所需要的;为什么你有外部的
SELECT和FROM? -
您似乎正在尝试从您想要获取的列名称中进行选择。您不能直接执行此操作。将列名读入变量。然后为动态SQL生成一个字符串,然后执行。
-
另外,你不明白的错误呢?问题是什么非常明确;您的子查询返回多个值(在 case 行中),并且在使用它的上下文中(作为表达式)是不允许的。
-
SQL中数据和对象(标识符)性质不同,不能混用。只需粘贴直接列名。一些 DBMS 允许您按模式选择列,但在 SQL Server 中,没有动态 SQL 是不可能的。
-
@Nassim 你应该学习一些 SQL 教程,在那里你将学习如何编写 SQL 语句。您尝试解决的任务(动态列名)的工作方式不同,因为 SQL 以不同的方式设计。
标签: sql sql-server select