2010-07-17 124 views
2

我在我的数据库中有很多表,我正在收集下面的代码的计算值,并希望将这些值插入到其他表中。我使用SELECT INTO方法,但数据库告诉我“关键字INTO行附近的语法不正确......”。我相信有一些我失踪,但不知道在哪里。代码看起来很好。这是我的代码。任何帮助,将不胜感激。SELECT INTO advanced

SELECT (second.[cdate][email protected]) AS 'Date', first.[machine_no] AS 'No', 
tbl_machines.[manufacturer] As 'Manufacturer', 
tbl_machines.[type] As 'Machine Type',tbl_machines.[game_name] AS 'Game Name', 
tbl_machines.[accounting_denomination] AS 'Denom', 
(second.[turnover])-(first.[turnover]) AS 'Turnover', 
(second.[total win])-(first.[total win]) AS 'Total win', 
(second.[games played])-(first.[games played]) AS 'Games Played', 
(second.[Bill in])-(first.[Bill in]) AS 'Bill In', 
(second.[credit in])-(first.[credit in]) AS 'Credit IN', 
(second.[cancel credit])-(first.[cancel credit]) AS 'Cancel Credit', 
tbl_rate.[euro] AS 'euro rate', 
tbl_rate.[dollar] AS 'dollar rate' 
INTO tbl_daily 
FROM tbl.meter first,tbl.machines,tbl_rate 
INNER JOIN tbl_meter second ON first.[Machine_No] = second.[Machine_No] 
AND 
tbl_machines.[local_no]=first.[machine_no] 
WHERE first.[cDate] = @StartDate 
AND second.[cDate] = @EndDate 
AND tbl_rate.[cdate][email protected]; 

好吧,我用INSERT INTO语法,一切都很顺利,但现在我有问题,日期时间。当我使用下面的sql命令时,我收到错误,它说“无法将数据类型位转换为日期时间”我试过Martin的转换方法,但它是一样的。

我的代码是

INSERT INTO tbl_daily SELECT tbl_machines.[ID] AS 'ID', (second.[cdate][email protected]) AS 'CDate', first.[machine_no] AS 'No', 
tbl_machines.[manufacturer] As 'Manufacturer', 
tbl_machines.[type] As 'MachineType', 
tbl_machines.[game_name] AS 'GameName', 
tbl_machines.[accounting_denomination] AS 'Denom', 
(second.[turnover]-first.[turnover]) AS 'Turnover', 
(second.[total win]-first.[total win]) AS 'Totalwin', 
(second.[games played]-first.[games played]) AS 'GamesPlayed', 
(second.[credit in]-first.[credit in]) AS 'CreditIN', 
(second.[Bill in]-first.[Bill in]) AS 'BillIn', 
(second.[cancel credit]-first.[cancel credit]) AS 'CancelCredit', 
tbl_rate.[euro] AS 'eurorate', 
tbl_rate.[dollar] AS 'dollarrate' 
FROM tbl_meter first,tbl_machines,tbl_rate 
INNER JOIN tbl_meter second ON first.[Machine_No] = second.[Machine_No] AND tbl_machines.[local_no]=first.[machine_no] 
WHERE first.[cDate] = @StartDate AND second.[cDate] = @EndDate AND tbl_rate.[cdate][email protected]; 
+1

这是什么SQL语言? – 2010-07-17 18:38:42

回答

0

注:以下答案写假设的SQL Server。我删除它收到VistaDB的澄清时,但在再次反删除它reading

VistaDB的,可以看作是一个子集,Microsoft SQL Server的T-SQL的 。所有 我们的语法在SQL Server中, 支持,但周围没有

在这种情况下,其他的方式,我认为它是安全地说,如果是在SQL Server无效,将在VistaDB的无效也?这在SQL Server中是无效的语法。

SELECT (second.[cdate][email protected]) AS 'Date' 

这段代码的目的是什么?它是否意味着一个布尔值? (即当列匹配变量时返回true)。如果是这样的话,在SQL Server中最接近于此。

SELECT CAST((CASE WHEN second.[cdate][email protected] THEN 1 ELSE 0 END) AS BIT) AS 'Date' 

编辑从我看到它旨在

SELECT @enddate AS 'Date' 

此外,我没有看到SELECT ... INTOlisted as a VistaDB command这里的意见。它是否受到支持?

+0

我正在使用VistaDB。我正在为我的客户之一写一个有小赌场的软件。我正在计算每日基地的机器赢得或亏损。这真的很复杂。 – Hakan 2010-07-17 18:43:25

+0

@Hakan - 如果你摆脱了这一点'(second。[cdate] = @ enddate)AS'Date','它工作吗?如果你只是做一个选择并暂时摆脱'INTO tbl_daily'位,该怎么办?那它有用吗? – 2010-07-17 19:08:08

+0

如果我不使用INTO tbl_daily它正在工作。我可以随时创建表格,但是当我尝试使用INTO时,我得到的是同样的错误。 – Hakan 2010-07-17 19:27:32

0

如果您使用的是SQL Server,Insert Into更适用于插入到即时创建的表中。这是一个好的做法,但如果表已经存在,那么我会用这个:

INSERT INTO table (column1, columns2, ...) 
SELECT 
    Value1, 
    Value2, 
    ... 
FROM ... 
+0

我没有使用SQL Server,但我会尝试。我正在使用Vistadb。我会让你知道结果。 – Hakan 2010-07-17 18:44:57