Pergunta

Eu tenho muitas tabelas no meu banco de dados e estou coletando valores calculados com o código a seguir e gostaria de Inserir esses valores em outra tabela.Eu estou Usando SELECT INTO método de banco de dados, mas diz-me que "Sintaxe incorrecta perto a palavra-chave NA linha ...".Eu acredito que não é algo que eu estou em falta, mas não sabe onde.Código parece bem.Aqui é o meu código.Qualquer ajuda seria apreciada.

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, eu costumava INSERIR NA sintaxe, tudo está indo bem, mas agora eu tenho problema com data / hora.Quando eu usei o seguinte comando sql estou recebendo o erro e diz que "não é Possível converter o tipo de dados bit para datetime" eu tentei Martin elenco método, mas é mesmo.

Meu código é

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;
Foi útil?

Solução

NB:Abaixo resposta foi escrito assumindo que o SQL Server.Eu eliminado, ao receber a VistaDB de esclarecimento, mas tem recuperados novamente sobre leitura que

VistaDB pode ser pensado como um subconjunto do Microsoft SQL Server, T-SQL.Todos nossa sintaxe é suportado no SQL Server, mas não a outra maneira ao redor

Nesse caso eu suponho que é seguro dizer que, se ele for inválida no SQL Server será inválido na VistaDB também?Esta é a sintaxe inválida no SQL Server.

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

Qual é o propósito desta parte do código?É destinado a ser um boolean?(i.é.retorna true quando a coluna coincide com a variável).Se assim no SQL Server, o mais próximo do que seria isso.

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

Editar A partir dos comentários que eu vejo destina-se a ser

SELECT @enddate AS 'Date'

Além disso, eu não vejo SELECT ... INTO listado como um VistaDB comando aqui.É definitivamente suportado?

Outras dicas

Se você estiver usando o SQL Server, Insert Into é mais para inserir em uma tabela que é criada no momento.É um ok maneira de fazer as coisas, mas se a tabela já existir, então eu iria usar isso:

INSERT INTO table (column1, columns2, ...)
SELECT
  Value1,
  Value2,
  ...
FROM ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top