SELECT INTO advanced

时间:2010-07-17 18:30:10

标签: sql vistadb

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

SELECT (second.[cdate]=@enddate) 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]=@enddate;

好的,我使用了INSERT INTO语法,一切顺利,但现在我遇到了datetime问题。当我使用下面的sql命令时,我收到错误并且它说“无法将数据类型位转换为datetime”我尝试了Martin的强制转换方法,但它是一样的。

我的代码是

INSERT INTO tbl_daily SELECT tbl_machines.[ID] AS 'ID', (second.[cdate]=@enddate) 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]=@enddate;

2 个答案:

答案 0 :(得分:0)

注意:以下答案是在假定SQL Server的情况下编写的。我在收到VistaDB澄清时删除了它,但在reading

后再次取消删除它
  

可以将VistaDB视为一个子集   Microsoft SQL Server T-SQL。所有的   SQL Server支持我们的语法,   但不是相反的方式

在这种情况下,我假设可以说,如果在SQL Server中它无效,它在VistaDB中也会无效吗?这是SQL Server中无效的语法。

SELECT (second.[cdate]=@enddate) AS 'Date'

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

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

修改从我看到的评论

SELECT @enddate AS 'Date'

此外,我在此处未看到SELECT ... INTO listed as a VistaDB command。它肯定支持吗?

答案 1 :(得分:0)

如果您使用的是SQL Server,Insert Into更适合插入即时创建的表。这是一种可行的方法,但如果表已经存在,那么我会使用它:

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