【问题标题】:Sub-query at select statement error选择语句中的子查询错误
【发布时间】:2016-09-21 22:37:22
【问题描述】:
DECLARE @colSelect TABLE(name VARCHAR(100));

insert into @colSelect values ('id')
insert into @colSelect values ('d')
insert into @colSelect values ('rpn')
insert into @colSelect values ('criticality')
insert into @colSelect values ('dateCreated')

DECLARE @tableName varchar(100), @startDate datetime, @endDate datetime

SET @tableName = 'tblFmeas'
SET @startDate  = '2016-04-05 00:00:00'
SET @endDate    = '2016-04-05 00:00:00'


DECLARE @SQL nvarchar(max)

SET @SQL = 'select ' + (select * from @colSelect) + ' from ' + @tableName + ' where dateCreated between ' + @startDate + ' and' + @endDate;

EXEC (@SQL)

有人对此有建议吗?

因为在我的应用中,用户选择了他想在报告中看到的列,我需要将它们传递给我的查询。

【问题讨论】:

  • 您应该输入您的查询,而不是提供屏幕截图
  • 将表中的行转换为逗号分隔字符串的所有不同方法:sqlmatters.com/Articles/…
  • 对不起@vkp 我的错!
  • 真的很感谢@Jamiec! Sureee 光标 ;)
  • 这里有一些建议。切勿在查询的选择部分使用子查询。如果您计划执行动态 SQL,您希望它在存储过程中。在讨论动态 SQL 时,请列举您的输入以防止 SQL 注入攻击。

标签: sql sql-server tsql select subquery


【解决方案1】:

这里它返回多个值,因为没有连接条件,所以这就是问题所在。

可能“从@colselect 中选择前1 个名称”会起作用。但不确定您要达到的目标。

【讨论】:

  • 这不会将值列表转换为 OP 要求的单个逗号分隔的字符串。另外,如果您不确定 OP 想要达到什么目标,为什么还要在外面抛出答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
相关资源
最近更新 更多