在此上下文中不允许子查询。只允许标量表达式

时间:2014-03-09 16:17:54

标签: sql sql-server-2000 coldfusion-10

我的客户正在运行MS SQL Server 2000。 我完成了一个项目,但我没有意识到MS SQL Server 2000不允许在内部插入选择值,从而产生错误:

Subqueries are not allowed in this context. Only scalar expressions are allowed.

当我运行以下查询时:

insert into table_one (greeting_column, name_column)
values (
         'hello',
         (select column_1 from table_to where name = 'bob')
       )

我从coldfusion10调用此查询。 通过替换调用查询的select语句并将结果存储在coldFusion列表变量中,然后迭代通过将CF列表变量的内容插入其各自记录的循环,我已经实现了利用coldFusion10解决此问题的解决方案,但是这需要更多的处理,然后是一个简单的SQL语句。我已经在另一个网页上找到了解决这个问题的解决方案(是的,我知道做一个'select *'是不好的做法,这只是一个例子):

CREATE PROC whatever
@REC int,
@ChangedIP varchar(15),
@ChangedBY varchar(30)
AS
INSERT INTO table_LOG
SELECT *, GETDATE(), @ChangedID, @ChangedBy FROM table WHERE record = @REC

但我不认为coldFusion会在查询中允许Transact-SQL变量(将在周末后尝试) 有没有办法重写不使用Transact-SQL变量?

2 个答案:

答案 0 :(得分:19)

我没有Microsoft SQL Server 2000,但这也应该有效,只需将VALUES替换为SELECT并删除括号:

insert into table_one (greeting_column, name_column)
SELECT 
         'hello',
         (select column_1 from table_to where name = 'bob')

答案 1 :(得分:4)

我不再需要测试SQL Server 2000,但我不知道它为什么不允许你的查询,AFAIK,它完全有效。我怀疑是Coldfusion或者你的访问提供商阻止了它。

无论如何,我确信以下内容是有效的:

insert into table_one (greeting_column, name_column)
Select 'hello',
        column_1 
from table_to 
where name = 'bob'