//解决办法 临时表
?
 表变量与其他变量相同,只在其作用域中有效,???
 ??
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
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|