Error ejecución sentencia dinamica SQL desde String
Publicado por Pedro José (3 intervenciones) el 12/01/2017 12:42:29
Hola,
Estoy haciendo un script para mis bases de datos, que las recorra todas, y compruebe si existe una tabla 'valores', si esta existe, recoge la menor fecha de la tabla y la mayor fecha de la tabla, y crea tantas tablas como meses hayan pasado desde la diferencia en meses de estas dos fechas, e inserta el valor correspondiente de la tabla valores.
El problema llega cuando tengo que ejecutar esa sentencia SQL dinámica, que me lanza un error.
Cuando ejecuto esto, me da el siguiente error
¿Me podeis hechar una mano?, No encuentro como puedo arreglar esto por ningún sitio. Gracias
Estoy haciendo un script para mis bases de datos, que las recorra todas, y compruebe si existe una tabla 'valores', si esta existe, recoge la menor fecha de la tabla y la mayor fecha de la tabla, y crea tantas tablas como meses hayan pasado desde la diferencia en meses de estas dos fechas, e inserta el valor correspondiente de la tabla valores.
El problema llega cuando tengo que ejecutar esa sentencia SQL dinámica, que me lanza un error.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
EXEC sp_msForEachDB 'DECLARE @FECHAInicial varchar(50) DECLARE @FECHAFinal varchar(50) DECLARE @inicio varchar(50) DECLARE @fin varchar(50) DECLARE @sql varchar(200) DECLARE @sql2 varchar(200) DECLARE @inicioMes varchar(30) DECLARE @finMes varchar(30)
USE ?;
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=''BASE TABLE'' AND TABLE_NAME=''valores'')
BEGIN
select DB_NAME() AS [Base de datos usada];
set @FECHAInicial = (SELECT min(fecha) from valores);
set @FECHAFinal = (SELECT max(fecha) from valores);
set @inicio = (SELECT CONCAT("valores_", MONTH(@FECHAInicial), "_", YEAR(@FECHAInicial)));
SET @fin = (SELECT CONCAT("valores_", MONTH(@FECHAFinal),"_", YEAR(@FECHAFinal)));
WHILE @inicio <> @fin
BEGIN
SELECT @inicio;
set @FECHAInicial = (SELECT DATEADD(month, 1, @FECHAInicial));
set @inicio = (SELECT CONCAT("valores_", MONTH(@FECHAInicial), "_", YEAR(@FECHAInicial)));
set @inicioMes = (SELECT DATEADD(month, DATEDIFF(month, 0, @FECHAInicial), 0))
set @inicioMes = (select convert(varchar(30), @inicioMes, 120))
set @finMes = DATEADD(month, ((YEAR(@inicioMes) - 1900) * 12) + MONTH(@inicioMes), -1)
set @finMes = DATEADD(day, 1, @finMes)
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=''BASE TABLE'' AND TABLE_NAME=@inicio)
BEGIN
SELECT 1 AS res
END
ELSE
BEGIN
set @sql2 = ''SELECT * into dbo.''+@inicio+'' FROM valores WHERE fecha>=FORMAT('''''' + @inicioMes + '''''',''''YYYY-MM-DD'''') and fecha<FORMAT('''''' + @finMes + '''''',''''YYYY-MM-DD'''')''
EXECUTE @sql2
END
END
IF @inicio = @fin
BEGIN
SELECT @inicio
END
END'
go
Cuando ejecuto esto, me da el siguiente error
1
The name 'SELECT * into dbo.valores_6_2015 FROM valores WHERE fecha>=FORMAT('Jun 1 2015 12:00AM','YYYY-MM-DD') and fecha<FORMAT('Jul 1 2015 12:00AM','YYYY-MM-DD')' is not a valid identifier.
¿Me podeis hechar una mano?, No encuentro como puedo arreglar esto por ningún sitio. Gracias
Valora esta pregunta


0