none
crear tabla con sp_executesql RRS feed

  • Pregunta

  • Hola, quiero generar una tabla temporal  en una base de datos de sql server (2014), cuya columna es el año de una fecha. Para hacerlo, genero los nombres que quiero asignar a las columnas y después la cadena para crear la tabla, pero no me aclaro con el formato:

    declare @AñoActual as int set @AñoActual = year(@fecha) 

    declare @AñoAnterior as int set @AñoAnterior = year(dateadd(yy,-1,@inicio))

    declare @Tabla as varchar(200) set @Tabla = ''

    ....

    set @Tabla = 'create Table ##MiTabla (fecha varchar(20),'+@AñoActual+' int, '+@AñoAnterior+' int)

    exec sp_executesql @Tabla


    pero me da este error:

    Error de conversión al convertir el valor varchar 'create Table ##MiTabla (fecha varchar(20),' al tipo de datos int.

    ¿podeis indicarme donde me estoy colando? 

    gracias, Laura

    martes, 30 de enero de 2018 11:07

Respuestas

  • Lo he hecho funcionar de la siguiente forma, cambiando el tipo de vbles:

    declare @AñoActual as varchar(4) set @AñoActual = year(@fecha) 
    declare @AñoAnterior as varchar(4) set @AñoAnterior = year(dateadd(yy,-1,@inicio))
    declare @Tabla as nvarchar(200) set @Tabla = ''

    Y añadiendo las comillas: 

    set @Tabla = 'create Table ##MiTabla (fecha varchar(20),"'+@AñoActual+'" int, "'+@AñoAnterior+'" int)

    exec sp_executesql @Tabla

    • Marcado como respuesta Lalisan martes, 30 de enero de 2018 11:39
    martes, 30 de enero de 2018 11:39

Todas las respuestas

  • creo que me faltan comillas..
    martes, 30 de enero de 2018 11:12
  • Lo he hecho funcionar de la siguiente forma, cambiando el tipo de vbles:

    declare @AñoActual as varchar(4) set @AñoActual = year(@fecha) 
    declare @AñoAnterior as varchar(4) set @AñoAnterior = year(dateadd(yy,-1,@inicio))
    declare @Tabla as nvarchar(200) set @Tabla = ''

    Y añadiendo las comillas: 

    set @Tabla = 'create Table ##MiTabla (fecha varchar(20),"'+@AñoActual+'" int, "'+@AñoAnterior+'" int)

    exec sp_executesql @Tabla

    • Marcado como respuesta Lalisan martes, 30 de enero de 2018 11:39
    martes, 30 de enero de 2018 11:39