In my sqluery, i am trying to add columns dynamically, but it is showing error Like:
Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1
Procedure expects parameter ‘@statement’ of type ‘ntext/nchar/nvarchar’.
this is my proc
declare @curntyear int
declare @pasyear int
declare @sql nvarchar(max)
declare @temp varchar(50)
select @pasyear=YEAR( DATEADD (YEAR,-3,GETDATE ()))
select @curntyear =YEAR (getdate())
print @pasyear
print @curntyear
create table #TempTable (years varchar(30))
insert into #TempTable select (cargo+port+railway+estate)as 'sum' from operatingincome where YEAR(createddate)=@pasyear
while (@curntyear >=@pasyear )
begin
set @pasyear =@pasyear +1
--select @temp=(cargo+port+railway+estate)as 'sum' from operatingincome where YEAR(createddate)=@pasyear
select @temp= convert(varchar,(cargo+port+railway+estate),106) from operatingincome where YEAR(createddate)= @pasyear
set @sql ='alter table #TempTable add '+ CONVERT(varchar,@pasyear,106)+' varchar(50)'
exec sp_executesql @sql
print @sql
set @sql = 'update #TempTable set '+CONVERT(varchar,@pasyear,106) +'='+@temp +' where years='''+CONVERT(varchar,@pasyear,106)+''
exec sp_executesql @sql
set @temp =''
end
select * from #TempTable
i am getting error like this :
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ‘2009’.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ‘2010’.
alter table #TempTable add 2010 varchar(50)
update #TempTable set 2010=9300 where years=2010
Sounds like you’re calling sp_executesql with a VARCHAR statement, when it needs to be NVARCHAR.
e.g. This will give the error because @SQL needs to be NVARCHAR
Declare your variable
@sqlvarchar to nvarchar, that will work fine:UPdate:
Change your
sqlsetting as below: you need to use[]in column name as[ColumName]