存储过程中执行EXEC语句

WTman 2003-10-29 02:52:28
CREATE PROCEDURE up_InfoShow
(
@uctrlType varchar(20)
)
AS
declare @LinkmanTel_One varchar(20),
@strSql varchar(6000) --当前条信息的第一联系人的联系电话--D
begin transaction --A(启动事务)
set @strSql='select top 1 @LinkmanTel_One=LinkmanTel from ' + @uctrlType
exec (@strSql)
……
执行完上述语句后,变量就失效了,提示必须声明变量@uctrlType
如果不用 exec (@strSql)方式执行,而是直接select top 1 @LinkmanTel_One=LinkmanTel from @uctrlType 好像语法不对,
请各位指教!
...全文
515 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-10-29
  • 打赏
  • 举报
回复
--楼主说错了吧? 消失的变量是@LinkmanTel吧
--这是因为变量的作用域问题,可以改用sp_executesql来解决此问题

CREATE PROCEDURE up_InfoShow
@uctrlType varchar(20)
AS
declare @LinkmanTel_One varchar(20),
@strSql nvarchar(4000) --当前条信息的第一联系人的联系电话--D,注意改了定义
begin transaction --A(启动事务)
set @strSql='select top 1 @LinkmanTel_One=LinkmanTel from ' + @uctrlType
exec sp_executesql @strSql,N'@LinkmanTel_One varchar(20) out',@LinkmanTel_One out
……
大文 2003-10-29
  • 打赏
  • 举报
回复
因为@uctrlType是存储过程内部的局部变量,只是在存储过程内部有效。
select top 1 @LinkmanTel_One=LinkmanTel from @uctrlType
不可以直接执行是因为表名是变量,直接执行的SQL中表名不可以为变量
txlicenhe 2003-10-29
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2364/2364046.xml?temp=.829693
[交流]动态SQL语句
txlicenhe 2003-10-29
  • 打赏
  • 举报
回复
CREATE PROCEDURE up_InfoShow
(
@uctrlType varchar(20)
)
AS
declare @LinkmanTel_One varchar(20),
@strSql nvarchar(6000) --当前条信息的第一联系人的联系电话--D
begin transaction --A(启动事务)
set @strSql='select top 1 @a=LinkmanTel from ' + @uctrlType
exec sp_executesql @strSql,N'@a varchar(20) output',@LinkmanTel_One output
……
pengdali 2003-10-29
  • 打赏
  • 举报
回复
CREATE PROCEDURE up_InfoShow
(
@uctrlType varchar(20)
)
AS
declare @LinkmanTel_One varchar(20),
@strSql nvarchar(4000)
begin transaction
set @strSql=N'select top 1 @LinkmanTel_One=LinkmanTel from ' + @uctrlType

exec sp_executesql @strSql,N'@LinkmanTel_One varchar(20) output',@LinkmanTel_One output

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧