【发布时间】:2013-06-25 14:46:26
【问题描述】:
我想要一个临时表,它可以使用 select 语句插入值。但是每次我运行查询,我总是得到错误
子查询返回超过 1 个值。当查询跟随 =、!=、、>= 或将子查询用作表达式时,这是不允许的。该语句已终止。 (0 行受影响)
这很奇怪,因为代码中似乎没有错误。但如果有,请纠正我。
这是查询:
DECLARE @tblKeywords TABLE (Keyword1 VARCHAR(MAX), Keyword2 VARCHAR(MAX), Keyword3 VARCHAR(MAX))
Insert into @tblKeywords (Keyword1, Keyword2, Keyword3)
Values(
(Select k from
(Select Keyword k, ROW_NUMBER() OVER (ORDER BY KeywordID) AS RowNum from t_SMSKeyword) as mytable
where mytable.RowNum BETWEEN 1 and 3),
(Select kk from
(Select Keyword kk, ROW_NUMBER() OVER (ORDER BY KeywordID) AS RowNum from t_SMSKeyword) as mytable
where mytable.RowNum BETWEEN 4 and 6),
(Select kkk from
(Select Keyword kkk, ROW_NUMBER() OVER (ORDER BY KeywordID) AS RowNum from t_SMSKeyword) as mytable
where mytable.RowNum BETWEEN 7 and 9)
)
Select * from @tblKeywords
【问题讨论】:
-
您是否单独触发了子查询?如果是,那么每个子查询的行数是多少?
-
@Brenelyn :您有三个子查询。其中一个或多个返回多于一行。于是问题就来了。尝试分别运行每个子查询,你会发现问题。
-
单独运行查询时效果很好。但我想在一个查询中得到结果,所以我可以把它们放在 asp:gridview 中。
-
例如,当您有 1 到 3 行时,这会给您三行而不是一行。你觉得有必要加TOP 1吗?
-
@Edper,是的,它给了我三行。
标签: sql sql-server database select insert