我想创建一个SQL代码,允许我根据特定月份创建列,现在我有这个语法,但是当我运行它时,它会显示我的错误。你能告诉我我做错了什么吗?创建一个SQL语句根据特定的月份创建列
alter proc N50_Actualizar_PA
@fecha varchar(6)
as
begin
declare @fin int
declare @cont int
declare @query varchar(5000)
declare @query1 varchar(900)
declare @query2 varchar(900)
declare @query3 varchar(900)
set @fin = (SELECT day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,@fecha+'01')+1, 0))))
set @cont = 1
set @query3 = 'while '[email protected]+' <= '[email protected]+'
begin
set @query = ''S''+cast('[email protected]+' as varchar(2))+'' float,E''+cast('[email protected]+' as varchar(2))+'' float,''
exec (@query)
set '[email protected]+' = '[email protected]+' + 1
end'
set @query1 = 'if not exists (select * from sysobjects where name = ''PLANTA_REP_PA_'[email protected]+''')
begin
create table PLANTA_REP_PA_'[email protected]+'(
ITEM int,
UBIGEO varchar(255),
CENTRO_POBLADO varchar(255),
DISTRITO varchar(255),
PROVINCIA varchar(255),
DEPARTAMENTO varchar(255),
TELEFONO varchar(255),
TIPO varchar(255),
OBSERVACION varchar(255),
TECNOLOGIA varchar(255),
ID_VSAT_BTS varchar(255),
UBICACION_VSAT_BTS varchar(255),
NIVEL_SENAL varchar(255),
TIPO_ENERGIA varchar(255),
COMENTARIOS varchar(255),
CANT_LINEAS_B_ARRENDADOR varchar(255),
'+ @query3 +'
TOTAL_SALIENTE float,
TOTAL_ENTRANTE float,
SALIENTE_MOVILES float,
ENTRANTE_MOVILES float)
end
else
begin
truncate table PLANTA_REP_PA_' + @fecha + '
end'
set @query2 = 'INSERT INTO PLANTA_REP_PA_' + @fecha + '
Select * from Temp_Planta_Rep_PA'
exec (@query3)
print (@query1)
print (@query2)
end
发表您的错误全文... – AHiggins
这是错误:男士245,级别16,状态1,过程N50_Actualizar_PA,第15行转换为varchar值时“而”数据类型 转换失败INT。 – Hitsugaya
特定问题(我在查询中看到的至少三个问题之一)是,您试图连接一个文本字符串('begin set @query = ...'和一个整数变量(@cont)。需要在连接之前将其转换为varchar,然而,改变这个特定的问题并不能解决你的问题,因为你的明显目标的一般方法不会起作用,给我几分钟,我会看看我是否可以发布一个答案,让你指向正确的方向 – AHiggins