我的客户正在运行 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 调用此查询。 我已经实现了利用 ColdFusion10 解决此问题的解决方案,方法是替换调用查询的 select 语句并将结果存储在 ColdFusion 列表变量中,然后迭代一个循环,将 CF 列表变量的内容插入到其各自的记录中,但是这比简单的 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 变量来重写?
最佳答案
我不再有 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')
关于sql - 在此上下文中不允许使用子查询。只允许使用标量表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22284661/