Pregunta

Tengo muchas tablas en mi base de datos y estoy recopilando valores calculados con el siguiente código y me gustaría insertar esos valores en otra tabla.Estoy usando el método SELECT INTO pero la base de datos me dice que "Sintaxis incorrecta cerca de la palabra clave INTO línea...".Creo que hay algo que me falta pero no estoy seguro de dónde.El código se ve bien.Aquí está mi código.Cualquier ayuda sería 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, usé la sintaxis INSERT INTO, todo va bien pero ahora tengo un problema con la fecha y hora.Cuando utilicé el siguiente comando SQL, aparece un error que dice "No se puede convertir el tipo de datos bit a fecha y hora". Probé el método de conversión de Martin, pero es lo mismo.

mi codigo es

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

Solución

NB: A continuación se escribió la respuesta, suponiendo que SQL Server. Lo eliminé cuando recibí la aclaración de Vistadb, pero lo he inventado nuevamente en leyendo que

VISTADB se puede considerar como un subconjunto de Microsoft SQL Server T-SQL. Todo Nuestra sintaxis es compatible con SQL Server, pero no al revés alrededor

En ese caso, supongo que es seguro decir que si no es válido en SQL Server, ¿no será válido en VISTADB también? Esta es la sintaxis no válida en SQL Server.

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

¿Cuál es el propósito de este bit de código? ¿Está destinado a ser un booleano? (es decir. Devuelve verdadero cuando la columna coincida con la variable). Si es así, en SQL Server, el más cercano a eso sería este.

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

editar de los comentarios que veo que está destinado a ser

SELECT @enddate AS 'Date'

Adicionalmente no veo SELECT ... INTO enumerado como un comando vistadb Aquí. ¿Es definitivamente apoyado?

Otros consejos

Si está utilizando SQL Server, Insert Into es más para insertar en una tabla que se crea sobre la marcha.Es una buena forma de hacer las cosas, pero si la tabla ya existe, usaría esta:

INSERT INTO table (column1, columns2, ...)
SELECT
  Value1,
  Value2,
  ...
FROM ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top