Sql server 动态地将列添加到可诱惑的?
在我的sqluery中,我尝试动态添加列,但它显示了如下错误: Msg 214,16级,状态2,程序sp_executesql,第1行 过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”。 这是我的程序Sql server 动态地将列添加到可诱惑的?,sql-server,Sql Server,在我的sqluery中,我尝试动态添加列,但它显示了如下错误: Msg 214,16级,状态2,程序sp_executesql,第1行 过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”。 这是我的程序 declare @curntyear int declare @pasyear int declare @sql nvarchar(max) declare @temp var
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
我得到的错误如下:
Msg 102,15级,状态1,第1行
“2009”附近的语法不正确。
Msg 102,15级,状态1,第1行
“2010”附近的语法不正确。
alter table#诱惑添加2010 varchar(50)
更新#诱惑集2010=9300,其中年份=2010
declare @sql varchar(max)
将来
在错误消息和(我的粗体)中告诉您这一点
[@statement=]语句
是包含Transact-SQL语句或批处理的Unicode字符串。语句必须是Unicode常量或Unicode变量
听起来像是在用VARCHAR语句调用sp_executesql,而它需要是NVARCHAR e、 g.这将给出错误,因为@SQL需要是NVARCHAR 将变量
@sql
varchar声明为nvarchar
,这样可以正常工作:
declare @sql nvarchar(max)
更新:
更改sql
设置如下:您需要在列名中使用[]
作为[ColumName]
set @sql ='alter table #TempTable add ['+ CONVERT(varchar,@pasyear,106)+'] varchar(50)'
set @sql = 'update #TempTable set ['+CONVERT(varchar,@pasyear,106) +']='+@temp +' where years='''+CONVERT(varchar,@pasyear,106)+''
你真的读到错误信息了吗?然后将其与@sql使用的类型进行比较?或者看看MSDN关于sp_executesql以及预期的数据类型?是的,应该是@sal nvarchar,new error=new question我的意思是我更新了我的问题并执行了查询,但它显示了error new error=new question。我们已修复了您原来的错误。不要用全新的无关问题更改或更新您的问题!是的,我换了外套,请检查一下,我们已经回答了原来的问题。你的新错误应该是一个新问题。谢谢你,gbn先生,我看到了这个问题,但我仍然没有执行代码,我得到了不同的错误。我的意思是我更新了我的问题并执行了查询,但它显示了错误。
set @sql ='alter table #TempTable add ['+ CONVERT(varchar,@pasyear,106)+'] varchar(50)'
set @sql = 'update #TempTable set ['+CONVERT(varchar,@pasyear,106) +']='+@temp +' where years='''+CONVERT(varchar,@pasyear,106)+''