2

データベースに多くのテーブルがあり、次のコードで計算値を収集しており、それらの値を他のテーブルに挿入したいと考えています。私は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;

OK、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;
4

2 に答える 2

0

注意:以下の回答は、SQL Serverを想定して書かれています。VistaDB の説明を受け取ったときに削除しましたが、それを読んで再び削除を取り消しました

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 さらに、ここでは VistaDB コマンドとしてリストされていません。確実にサポートされていますか?

于 2010-07-17T18:31:12.530 に答える
0

SQL Server を使用している場合はInsert Into、その場で作成されたテーブルに挿入するためのものです。これは問題のない方法ですが、テーブルが既に存在する場合は、これを使用します。

INSERT INTO table (column1, columns2, ...)
SELECT
  Value1,
  Value2,
  ...
FROM ...
于 2010-07-17T18:38:52.590 に答える