Вопрос

У меня есть много таблиц в моей базе данных, и я собираю расчетные значения со следующим кодом и хотел бы вставить эти значения в другую таблицу.Я использую SELECT в метод, но база данных сообщает мне, что « неверный синтаксис вблизи ключевое слово в строку ...» .Я считаю, что есть что-то, что я скучаю, но не уверен, где.Код выглядит хорошо.Вот мой код.Любая помощь будет оценена.

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;
.


ОК, я использовал вставку в синтаксис, все идет хорошо, но теперь у меня проблема с 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;
.

Это было полезно?

Решение

NB: Ниже ответ был написан предполагающий SQL Server. Я удалил его при получении разъяснений Vistadb, но снова восстановил его на чтение

Vistadb можно рассматривать как подмножество Microsoft SQL Server T-SQL. Все Наш синтаксис поддерживается на SQL Server, Но не наоборот

В этом случае я предполагаю, что он безопасен, чтобы сказать, что если он недействителен на SQL Server, он также будет недействительным в Vistadb? Это неверный синтаксис в SQL Server.

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

Какова цель этого бита кода? Это должно быть логическими? (I.e. Вернитесь 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 ...
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top