Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Ayuda con insert to en exec

Estas en el tema de Ayuda con insert to en exec en el foro de SQL Server en Foros del Web. Saludos estoy tratando de hacer el siguiente storedprocedure en MSSQL Express 2005 y no me funciona: Create sp_ActualizaTabla @id_Muestra as bigint, @TimeStampPI as datetime, @Valor ...
  #1 (permalink)  
Antiguo 03/09/2010, 16:35
 
Fecha de Ingreso: agosto-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Ayuda con insert to en exec

Saludos estoy tratando de hacer el siguiente storedprocedure en MSSQL Express 2005 y no me funciona:

Create sp_ActualizaTabla
@id_Muestra as bigint,
@TimeStampPI as datetime,
@Valor as float
AS
Begin
DECLARE @id nvarchar(10)
DECLARE @TSPI nvarchar(30)
DECLARE @V as nvarchar(10)
DECLARE @sql as nvarchar(200)

SET @id = @id_Muestra
SET @TSPI = @TimeStampPI
SET @V = @Valor
SET @sql = 'INSERT INTO TablaA(íd_Muestra, TimeStampPI, Valor)'
SET @sql = @sql + 'VALUE(' + @id + ', ' + @TSPI + ', ' + @V + ')'

EXEC (@sql)
END

Me marca error al convertir chart a datetime, si ejecuto directamente la consulta desde una ventana sqlquery :

INSERT INTO TablaA(íd_Muestra, TimeStampPI, Valor) VALUE(2, '20100902 07:00:05', 3.84) si funciona el comando INSERT y almacena los datos en la tabla.

Pero si desde una ventana sqlquery le doy:
sp_ActualizaTabla 2, '20100805 07:00:05', 3.84, me marca error cerca de 5 en referencia a la fecha.

ya elimine la parte del TimeStampPI y deje el id_muestra y valor y si funciona correctamente el storedprocedure.

Que puedo hacer ya que requiero almacenar en la tabla los 3 valores y requiero que la fecha tenga la parte de horas, minutos y segundos.

Muchas Gracias.

Última edición por CVeronica; 03/09/2010 a las 17:52
  #2 (permalink)  
Antiguo 03/09/2010, 18:00
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Ayuda con insert to en exec

Las FECHAS, deben llevar COMILLAS SIMPLES, ademas ¿para que volver a setear tus valores de entrada en unas variables defininas?, ¿alguna razon para no utilizar estas variables de entrada para hacer el INSERT?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 03/09/2010, 18:14
 
Fecha de Ingreso: agosto-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Ayuda con insert to en exec

Uso las variables de paso porque me marcaba errores similar a la que me marca con la fecha en bgint y en float, respecto a las comillas si utilizo las comillas simples.

el error que me indica es:
"Error converting data type varchar to datetime."

Gracias

Última edición por CVeronica; 03/09/2010 a las 18:24
  #4 (permalink)  
Antiguo 03/09/2010, 22:13
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Ayuda con insert to en exec

Yo lo escribo asi:

Código:
Create sp_ActualizaTabla
  @id_Muestra as bigint,
  @TimeStampPI as datetime,
  @Valor as float
AS
Begin

 insert into tablaa values(@id_muestra, @timestamppi,@valor)

END
Transact sql sabe que tipo de datos es, no es necesario indicarle comillas ni nada de eso.
  #5 (permalink)  
Antiguo 03/09/2010, 22:16
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Ayuda con insert to en exec

El error que te da es por querer concatenar un datetime con un varchar. No se puede hacer esto:

set @var='cadena'+@variablefecha

Debes hacer la conversión.

set @var='cadena'+convert(varchar(12),@variablefecha)
  #6 (permalink)  
Antiguo 03/09/2010, 22:40
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Ayuda con insert to en exec

Para saber si una fecha es correcta, utiliza la funcion ISDATE()

Código SQL:
Ver original
  1. SELECT ISDATE( '20100805 07:00:05)

Si el resultado es 1, es una fecha correcta
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 04/09/2010, 08:37
 
Fecha de Ingreso: agosto-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Ayuda con insert to en exec

saludos claudiovega, primero no hago el insert directo porque pienso pasar el nombre de la tabla como parametro ya que seran varias las tablas que quiero que este SP le pege y segundo convierto la fecha a nvarchar(20) y no funciona aun, si hago el insert into directo sin cargarlo en la variable sql y ejecuto el sp funciona muy bien, como les comento al cargar el insert into a la variable sql es cuando tengo problemas.
  #8 (permalink)  
Antiguo 04/09/2010, 09:24
 
Fecha de Ingreso: agosto-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Ayuda con insert to en exec

la fecha me arroja que si es una fecha valida y el SP es el siguiente manera siguiendo las recomendaciones de claudio vega

ALTER PROCEDURE [dbo].[sp_ActualizaTags]
@ID_Muestra as bigint,
@TSPI as datetime,
@Valor as float,
@NombreTabla as nvarchar(50)
AS
BEGIN
print @ID_Muestra
print @TSPI
print @Valor
print @NombreTabla
--SET NOCOUNT ON;
DECLARE @sqlcommand nvarchar(200)
SET @sqlcommand = 'INSERT INTO ' + @NombreTabla + '(ID_Muestra, TimeStampPI, Valor)'
SET @sqlcommand = @sqlcommand + ' VALUES(' + convert(nvarchar(10), @ID_Muestra)
SET @sqlcommand = @sqlcommand + ', ' + convert(nvarchar(20), @TSPI) + ', ' + convert(nvarchar(10), @Valor) + ')'
EXEC (@sqlcommand)
END

y Lo ejecuto con:

sp_ActualizaTags 2, '20100821 15:00:00', 3.87, 'TAG_ZI_7045_SCLR1_OUT_CV'

Y los prints me arrojan son los siguientes:

2
Ago 21 2010 3:00PM
3.87
TAG_ZI_7045_SCLR1_OUT_CV

Mens. 102, Nivel 15, Estado 1, Línea 1
Sintaxis incorrecta cerca de '21'.

Como si la fecha la trozara en varias variables y el espacio entre dia y año me arroja el error, nota como se puede ver en la ejecucion la fecha la paso en formato ANSI
  #9 (permalink)  
Antiguo 04/09/2010, 09:51
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Ayuda con insert to en exec

La fecha debe ir entre comillas simples, asi: 'Ago 21 2010 3:00PM'. Las comillas que tienes sólo están formando la cadena, pero no encierran la fecha.
  #10 (permalink)  
Antiguo 04/09/2010, 10:07
 
Fecha de Ingreso: agosto-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Ayuda con insert to en exec

Cita:
Iniciado por claudiovega Ver Mensaje
La fecha debe ir entre comillas simples, asi: 'Ago 21 2010 3:00PM'. Las comillas que tienes sólo están formando la cadena, pero no encierran la fecha.
de hecho la fecha va en comillas simples como puedes ver al ejecutar el sp, la representacion que ves es del comando print, ahora, hice lo siguiente, puse el TSPI en otra Tabla e hice un INSERT para @ID_Muestra y @Valor y un UPDATE para traer el @TSPI desde la otra tabla y me funciono, muestro el codigo a continuacion:

USE [db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_ActualizaTags]
@ID_Muestra as bigint,
--@TSPI as datetime,
@Valor as float,
@NombreTabla as nvarchar(50)
AS
BEGIN
print @ID_Muestra
--print @TSPI
print @Valor
print @NombreTabla
--SET NOCOUNT ON;
DECLARE @sqlcommand nvarchar(200)
DECLARE @sqlTS nvarchar(20)
-- SELECT @sqlTS = TimeStampPI FROM [dbo].[TimeStamp_Indice] WHERE ID_Muestra = convert(nvarchar(10), @ID_Muestra)
print @sqlTS
SET @sqlcommand = 'INSERT INTO ' + @NombreTabla + '(ID_Muestra, Valor)'
SET @sqlcommand = @sqlcommand + ' VALUES(' + convert(nvarchar(10), @ID_Muestra) + ', ' + convert(nvarchar(10), @Valor) + ')'
print @sqlcommand
EXEC (@sqlcommand)
SET @sqlcommand = 'UPDATE ' + @NombreTabla + ' SET TimeStampPI =(SELECT TimeStampPI FROM TimeStamp_Indice WHERE ID_Muestra = '
SET @sqlcommand = @sqlcommand + convert(nvarchar(10), @ID_Muestra) + ') WHERE ID_Muestra = ' + convert(nvarchar(10), @ID_Muestra)
print @sqlcommand
EXEC (@sqlcommand)
END

Ahora quisiera saber como poner el select del UPDATE en la instruccion del INSERT para hacer todo en un solo paso.

Gracias
  #11 (permalink)  
Antiguo 04/09/2010, 11:17
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Ayuda con insert to en exec

Aquí la fecha no va entre comillas simples.

SET @sqlcommand = @sqlcommand + ', ' + convert(nvarchar(20), @TSPI) + ', ' + convert(nvarchar(10), @Valor) + ')'

Sólo estás uniendo las comas a la cadena.

Respecto de lo último que pides existe la sintaxis.

insert into tabla1 (campo1,campo2) select campo1,campo2 from tabla2 where ....

Hay que usar la misma cantidad de campos y tipo de datos de cada campo.
  #12 (permalink)  
Antiguo 04/09/2010, 14:00
 
Fecha de Ingreso: agosto-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Ayuda con insert to en exec

Cita:
Iniciado por claudiovega Ver Mensaje
Aquí la fecha no va entre comillas simples.

SET @sqlcommand = @sqlcommand + ', ' + convert(nvarchar(20), @TSPI) + ', ' + convert(nvarchar(10), @Valor) + ')'

Sólo estás uniendo las comas a la cadena.

Respecto de lo último que pides existe la sintaxis.

insert into tabla1 (campo1,campo2) select campo1,campo2 from tabla2 where ....

Hay que usar la misma cantidad de campos y tipo de datos de cada campo.
Ok ya entendi dejame tratar de nuevo, muchas gracias
  #13 (permalink)  
Antiguo 08/09/2010, 13:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Ayuda con insert to en exec

Código:
SET @sqlcommand = @sqlcommand + ', ' + char(39) + convert(nvarchar(20), @TSPI) + char(39) + ', ' + convert(nvarchar(10), @Valor) + ')'

Asi pones las comillas en donde deben de ir

Saludos!

Etiquetas: exec, insert
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:49.