ВЫБРАТЬ В продвинутый
У меня есть много таблиц в моей базе данных, и я собираю вычисленные значения с помощью следующего кода и хотел бы вставить эти значения в другую таблицу. Я использую метод 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, я получаю сообщение об ошибке "Не удается преобразовать бит типа данных в дату и время". Я попробовал метод приведения Мартина, но он тот же.
Мой код
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 ответа
Примечание: ниже был написан ответ, предполагая, что 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. Это определенно поддерживается?
Если вы используете SQL Server, Insert Into
больше для вставки в таблицу, которая создается на лету. Это нормальный способ, но если таблица уже существует, я бы использовал это:
INSERT INTO table (column1, columns2, ...)
SELECT
Value1,
Value2,
...
FROM ...