当前位置: 代码迷 >> Sql Server >> 执行拼凑的sql语句提示must declare variable
  详细解决方案

执行拼凑的sql语句提示must declare variable

热度:74   发布时间:2016-04-24 09:55:52.0
执行拼接的sql语句提示must declare variable
declare @sql varchar(10240),@yy varchar(200)
select @sql='select @yy=qymc from qyxxb where qybh=''11'''
exec(@sql)

提示must declare variable @yy

在sybase15上是可以执行,老版本12.5的不行,请各位前辈有没有什么办法,先谢谢了
------解决思路----------------------
看错了,1楼作废。
具体你要查下 exec 的帮助,如何才能吧结果返回到外部变量中。
------解决思路----------------------
varchar的最大长度为8000

declare @sql varchar(8000)
select @sql='declare @yy varchar(200) select @yy=qymc from qyxxb where qybh=''11'''
exec(@sql)

------解决思路----------------------
select @sql='select @yyqymc from qyxxb where qybh=''11'''
这是全角
然后sybase15不清楚,MSSQL 动态执行SQL时 里面的变量要自己定义或传入ouput 变量
最后,MSSQL 貌似varchar最长8000
------解决思路----------------------
调用问题。你用动态SQL 调用他,前面的声明已经超出他的作用域了。动态语句里面的变量要在调用语句里面声明
declare @sql varchar(max)
select @sql='declare @yy varchar(200)    select @yy=qymc from qyxxb where qybh=''11'''
exec(@sql)

这样就OK 了。

------解决思路----------------------
引用:
调用问题。你用动态SQL 调用他,前面的声明已经超出他的作用域了。动态语句里面的变量要在调用语句里面声明
declare @sql varchar(max)
select @sql='declare @yy varchar(200)    select @yy=qymc from qyxxb where qybh=''11'''
exec(@sql)

这样就OK 了。


你要把结果返回外部变量中吗?
用SP_executesql
-- 注意这里的@sql 比较定义为NVARCHAR
declare @sql nvarchar(max),  @yy varchar(200) 
select @sql=' select @yy=qymc from aagyxb where gybh=''11'' '
exec sp_executesql @sql,N'@yy varchar(20) output', @yy output
print @yy
  相关解决方案