2012-02-09 96 views
1

当插入一行我运行下面的SQL一个CFQUERY标签INSERT/SELECT语句只使用CFQUERY

INSERT INTO Meeting_RFPMeetings (RFP_ID, Meeting_ID, Inserted, Create_UserID)

SELECT 21, 15835, {ts '2012-02-09 14:08:28'}, 42126

UNION ALL

SELECT 21, 15917, {ts '2012-02-09 14:08:28'}, 42126

UNION ALL

SELECT 21, 17052, {ts '2012-02-09 14:08:28'}, 42126

但它只向数据库插入一行。当我在查询分析器中运行查询时,它插入3行。我在我的实际语句中使用循环和queryparam,但即使这个版本失败。

我使用这个代码中插入另一台服务器上的数据,它工作正常,但在这里,即使是

INSERT INTO TABLE (ID)

SELECT ID FROM TABLE1

只插入一行。

数据库服务器是MSSQL 2000

我想在我的DSN找到设置,但没有站出来给我,为什么它不会工作

+0

如果是*确切*代码,我看不出有什么不妥的地方。事实上,它适用于sql 2005。如何验证它只插入一行?你确定没有别的限制行吗? – Leigh 2012-02-09 21:34:53

回答

2

尝试在括号包裹你的SELECT子查询,看如果有帮助。

+0

把我的SELECT行写成'(SELECT 21,15835,{ts'2012-02-09 14:08:28'},42126)'解决了这个问题。非常感谢Rob。 – 2012-02-09 21:39:15

0

我认为UNION ALL语句是问题所在。首先,您一次尝试插入多少行?你试过了MySQL兼容的解决方案提供在这里:

How to Execute 2 or more insert statements using CFQuery in coldfusion?

您运行的是什么版本的ColdFusion?

+0

通常,UNION/UNION ALL作为单个语句处理(不是多个)。我用ms sql 2005多次使用过它。 – Leigh 2012-02-09 21:29:54

+0

UNION ALL是MSSQL的正确语法。一次可以插入1或100行。罗布的回答让我的查询工作。 – 2012-02-09 21:41:21

+0

@mrbusche - 有趣的是它需要在2000年使用括号。它适用于2005年的开箱即用。 – Leigh 2012-02-09 21:44:52

0

尝试命名列,并把工会在子查询:

INSERT INTO Meeting_RFPMeetings (RFP_ID, Meeting_ID, Inserted, Create_UserID) 
SELECT [1], [2], [3], [4] 
FROM 
(
SELECT 21 AS [1], 15835 AS [2], {ts '2012-02-09 14:08:28'} AS [3], 42126 AS [4] 

UNION ALL 

SELECT 21 AS [1], 15917 AS [2], {ts '2012-02-09 14:08:28'} AS [3], 42126 AS [4] 

UNION ALL 

SELECT 21 AS [1], 17052 AS [2], {ts '2012-02-09 14:08:28'} AS [3], 42126 AS [4] 
) a 
+0

我试过了,它也失败了。必须是我的MSSQL版本的问题。我看不出有什么理由不这么做 – 2012-02-09 21:40:28