//解决办法 临时表

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

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] 举报,一经查实,本站将立刻删除。