在delphi中如何建临时表,用sql语言写
我在delphi中用add()语言和sql语言写了临时表的创建,但是在sql查询分析器中却查不到建的临时表。但是在delphi中却反馈说临时表已存在?但是又不用?这是怎么...
我在delphi中用add()语言和sql语言写了临时表的创建,但是在sql查询分析器中却查不到建的临时表。但是在delphi中却反馈说临时表已存在?但是又不用?这是怎么回事啊。求助高手中。。。
展开
5个回答
展开全部
呵呵,临时表分为2种,一种是#开头,代表在自己的连接中唯一可用,属于局部临时表, 当连接关闭时自动删除。一种是##开头,代表全局连接,其他的连接程序也可以看到,当连接关闭时自动删除。你的情况是一定要确定创建的是全局临时表,另外,你的创建临时表的连接不能关闭。按你的说法可能是你在调用存储过程的时候连接已经关闭了,这时候临时表就不存在了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1:
select * into #newTable from
(select * from table1 cross join table2) a
2:
select * into #newTable from table1 cross join table2
补充一个很早之前帮人家写的交叉表的例子
/*create table 学生成绩表
(学号 varchar(10) not null, 姓名 varchar(10) not null,
课程 varchar(20) not null, 成绩 float,标识 varchar(10))*/
/*
insert into 学生成绩表 values('1','李四','语文',85,')
insert into 学生成绩表 values('2','王三','数学',0,'缺')
insert into 学生成绩表 values('1','李四','数学',60,'补')
insert into 学生成绩表 values('3','张三','语文',55,')
insert into 学生成绩表 values('2','王三','语文',35,'作')
insert into 学生成绩表 values('3','张三','数学',89,')
*/
--select * from 学生成绩表
/*
declare @sql varchar(8000)
set @sql='select 学号,姓名,'
select @sql=@sql 'cast(sum(case 课程 when '' 课程 '' then 成绩 else 0 end) as varchar(10))
IsNull((select 标识 from 学生成绩表 where 学号=b.学号 and 课程='' 课程 ''),'') as '
课程 ' ,' from (select Distinct 课程 from 学生成绩表) as a
select @sql=left(@sql,len(@sql)-1) ' from 学生成绩表 as b group by 学号,姓名'
exec(@sql)
*/
select * into #newTable from
(select * from table1 cross join table2) a
2:
select * into #newTable from table1 cross join table2
补充一个很早之前帮人家写的交叉表的例子
/*create table 学生成绩表
(学号 varchar(10) not null, 姓名 varchar(10) not null,
课程 varchar(20) not null, 成绩 float,标识 varchar(10))*/
/*
insert into 学生成绩表 values('1','李四','语文',85,')
insert into 学生成绩表 values('2','王三','数学',0,'缺')
insert into 学生成绩表 values('1','李四','数学',60,'补')
insert into 学生成绩表 values('3','张三','语文',55,')
insert into 学生成绩表 values('2','王三','语文',35,'作')
insert into 学生成绩表 values('3','张三','数学',89,')
*/
--select * from 学生成绩表
/*
declare @sql varchar(8000)
set @sql='select 学号,姓名,'
select @sql=@sql 'cast(sum(case 课程 when '' 课程 '' then 成绩 else 0 end) as varchar(10))
IsNull((select 标识 from 学生成绩表 where 学号=b.学号 and 课程='' 课程 ''),'') as '
课程 ' ,' from (select Distinct 课程 from 学生成绩表) as a
select @sql=left(@sql,len(@sql)-1) ' from 学生成绩表 as b group by 学号,姓名'
exec(@sql)
*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在创建前加上这一句:
SQL.Add('if object_id(''tempdb..'+临时表名+''') is not null drop table '+临时表名);
在系统中查找是否存在此表,如果存在,则删除!!!
SQL.Add('if object_id(''tempdb..'+临时表名+''') is not null drop table '+临时表名);
在系统中查找是否存在此表,如果存在,则删除!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
做成全局临时表,##临时表名。#临时表对当前的用户连接是可见的,其他用户是不可见的。
追问
在delphi中创建了全局临时表,但是好像在存储过程中不能用啊。我查询了多条记录存在临时表中,但是却没办法提交。请问是我的存储过程有问题吗?但是当我建的是本地表做为临时吧存储表却可以用,能告诉我是什么问题吗?谢谢。
追答
你的Delphi的连接关闭了,临时表就删了,你想用全局临时表,要保证创建临时表的连接时一直存在的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
临时表是看不到的,但是能查到select.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询