微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS sqlserver中的变量 表变量问题--解决办法

//解决办法 临时表

 

表变量与其他变量相同,只在其作用域中有效,   

  
exec ()执行的sql已是另一个会话了,变量无法传递的   

    

  可以用临时表解决   

    

  
create     proc    test   

  
as    

  
declare     @strsql     varchar ( 300 )   

  
create     table    #tblTmp   ( [ ID ]     int , [ name ]     varchar ( 20 ))   

    

  
set     @strsql     =    " insert     into    #tblTmp    select    ID,name    from    tbl"   

  
exec ( @strsql )   

    

  
GO

 

//第二中解决办法

 

问题描述:

在存储过程中我定义了两个参数,
@Filed代表一个 , @TableName代表表名 ,一个变量 @sqlStr代表sql语句 ,

以下语句:
SELECT   @sqlStr = SELECT   TOP   1   @Field   FROM   @TableName

EXEC ( @sqlStr )

这两句都û问题,但是如何把查询出来的结果赋值到一个变量中(如变量
@tmpStr )?

直接用如下语句则语法检查时会报错,说须先定义变量
@TableName ,但是我已经定义了啊:

SELECT   TOP   1   @tmpStr = @Field   FROM   @TableName

解决方案:
declare   @sql   nvarchar ( 4000 )

set   @sql = N ' SELECT TOP 1 @tmpStr= ' + @Field + '  FROM  ' + @TableName

exec  sp_executesql  @sql ,N ' @tmpStr 类型 out ' , @tmpStr  out

 

//第三种解决办法

 

可以这样: 

delcare @sqlstr varchar(
8000

declare @i 
int  

while  (@i > 0

begin 

set  @sqlstr  =   ' CREATE TABLE TABLE_ ' + cast(@I  as  varchar) + ' (...) '  

exec(@sqlstr) 

set  @i = @i - 1  

end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐