//解决办法 临时表 表变量与其他变量相同,只在其作用域中有效,exec()执行的sql已是另一个会话了,变量无法传递的可以用临时表解决createproctestasdeclare@strSQLvarchar(300)createtable#tblTmp([ID]int,[name]varchar(20))set@strSQL="insertinto#tblTmpselectID,namefromtbl"exec(@strSQL)GO //第二中解决办法 问题描述:在存储过程中我定义了两个参数,@Filed代表一个列,@TableName代表表名,一个变量@SQLStr代表SQL语句,以下语句:SELECT@SQLStr=SELECTTOP1@FieldFROM@TableNameEXEC(@SQLStr)这两句都û问题,但是如何把查询出来的结果赋值到一个变量中(如变量@tmpStr)?直接用如下语句则语法检查时会报错,说须先定义变量@TableName,但是我已经定义了啊:SELECTTOP1@tmpStr=@FieldFROM@TableName解决方案:declare@sqlnvarchar(4000)set@sql=N'SELECTTOP1@tmpStr='+@Field+'FROM'+@TableNameexecsp_executesql@sql,N'@tmpStr类型out',@tmpStrout //第三种解决办法 可以这样:delcare@sqlstrvarchar(8000)declare@iintwhile(@i>0)beginset@sqlstr='CREATETABLETABLE_'+cast(@Iasvarchar)+'(...)'exec(@sqlstr)set@i=@i-1end