问题:在存储过程中使用临时表时,不Create临时表就会报错。
分析了下,总结了临时表创建方式的区别。
创建临时表有两种方法:
方法一
create table #临时表名
(
字段1 约束条件,
字段2 约束条件,
……
)
create table ##临时表名
(
字段1 约束条件,
字段2 约束条件,
……
)
方法二
select * into #临时表名 from 你的表;
select * into ##临时表名 from 你的表;
注:以上的#代表局部临时表,##代表全局临时表
在存储过程中使用时的区别:
存储过程中有时会将sql语句先拼接成一个字符串,然后用exec执行,这时候如果在字符串中用第二种方式创建临时表就会报错(找不到该临时表),只能用第一种方式创建好临时表以后再将数据插入。
示例:
1.直接执行sql语句,两种方式都可以
1 select Name into #tStudent from Test_student 2 select * from #tStudent
和
1 create table #tStudent 2 ( 3 Name varchar(100) 4 ) 5 6 insert into #tStudent select Name from Test_student 7 select * from #tStudent
执行结果一样,如下图
2.将sql语句拼接为字符串,则只能使用第一种方式
1 declare @outsql varchar(4000) 2 set @outsql = ‘select sName into #tStudent from Test_student‘ 3 exec (@outsql) 4 select * from #tStudent
这样会报错,如下
1 declare @outsql varchar(4000) 2 create table #tStudent 3 ( 4 sName varchar(100) 5 ) 6 set @outsql = ‘insert into #tStudent select Name from Test_student‘ 7 exec (@outsql) 8 select * from #tStudent
这样可以正确执行,如下图
时间: 2024-10-20 01:30:22