问题是这个样子的。数据库sql2005 调用程序 vc++
------------------------------------------首先,我写了个存储过程,查询得到一组数据。然后要在VC++程序上显示这一组数据。vc的程序我不熟悉,同事说让我把 查询得到的数据插入一个临时表,然后他调用我的存储过程,得到一个临时的表,然后在用程序去查这个临时表中的数据。--------------------------------------我现在有一些疑问。1.数据库在服务器上,每个客户端触发事件,执行存储过程产生一个临时表,如果同时触发是不是会因为产生2个相同名的临时表而发生冲突?2.如果如此频繁的使用临时表,对服务器系统资源的消耗是不是很大?3.最糟糕的是,如果这个方法可行,查询出一组数据 该如何导入一个临时表,大家能不能教教我怎么写???4.有没有别的什么方法? 比如不用临时表,而是查询得到的数据导入一个试图,或者触发器之类的方法,又该怎么写?因为第一次与 vc程序结合,不熟悉,希望大家多多帮助,谢谢了...我的存储过程是:
ALTER PROCEDURE [dbo].[WinFormConfigExhibitStandByID]
-- Add the parameters for the stored procedure here
@ExhibitID int,
@XYrowcol nvarchar(50) output, --终端所处的 行-列 (第一个要传出的参数)
@PhoneInfo nvarchar(50) output, --终端的品牌 型号 (第二个要传出的参数)
@TerminalID int output --终端id (第三个要传出的参数)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON; -- Insert statements for procedure here
SELECT @XYrowcol=(str(XRow)+'--'+ltrim(str(YColumn))),@PhoneInfo=(c.BrandName+' '+b.TerminalModel),@TerminalID=a.TerminalID from InteHel_ExhibitTerminal a
inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
inner join InteHel_Brand c on b.BrandID=c.BrandID
where a.ExhibitID=@ExhibitID
END
------------------------------------------首先,我写了个存储过程,查询得到一组数据。然后要在VC++程序上显示这一组数据。vc的程序我不熟悉,同事说让我把 查询得到的数据插入一个临时表,然后他调用我的存储过程,得到一个临时的表,然后在用程序去查这个临时表中的数据。--------------------------------------我现在有一些疑问。1.数据库在服务器上,每个客户端触发事件,执行存储过程产生一个临时表,如果同时触发是不是会因为产生2个相同名的临时表而发生冲突?2.如果如此频繁的使用临时表,对服务器系统资源的消耗是不是很大?3.最糟糕的是,如果这个方法可行,查询出一组数据 该如何导入一个临时表,大家能不能教教我怎么写???4.有没有别的什么方法? 比如不用临时表,而是查询得到的数据导入一个试图,或者触发器之类的方法,又该怎么写?因为第一次与 vc程序结合,不熟悉,希望大家多多帮助,谢谢了...我的存储过程是:
ALTER PROCEDURE [dbo].[WinFormConfigExhibitStandByID]
-- Add the parameters for the stored procedure here
@ExhibitID int,
@XYrowcol nvarchar(50) output, --终端所处的 行-列 (第一个要传出的参数)
@PhoneInfo nvarchar(50) output, --终端的品牌 型号 (第二个要传出的参数)
@TerminalID int output --终端id (第三个要传出的参数)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON; -- Insert statements for procedure here
SELECT @XYrowcol=(str(XRow)+'--'+ltrim(str(YColumn))),@PhoneInfo=(c.BrandName+' '+b.TerminalModel),@TerminalID=a.TerminalID from InteHel_ExhibitTerminal a
inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
inner join InteHel_Brand c on b.BrandID=c.BrandID
where a.ExhibitID=@ExhibitID
END
2 可能的
3 select * into #temp from tb
4 可以用查询视图的方法得出结果,视图不是一个容器或者结果集 是一个查询.触发器只在insert update的时候 触发
每次别人使用完毕后删除tmp而你判断到tmp存在则不进行数据插入,如果不存在,创建tmp,导入数据.
2。临时表是很好的处理方式 用完释放掉就好
3。
4。触发器是不推荐的 视图可以考虑 毕竟可以精简过程
5。以上纯属个人的一点烂意见 不足之处 请你原谅
在你的存储过程里,就表变量就行了。 create procedure ProcName
@param1 param1Type,....
as
set nocount on --和create table语句语法类似,列名 后接 列类型就够了,是你返回表的结构
declare @t table(id int,[name] varchar(20)....) insert into @t (feild1,field2....)
select .....
from ....
where ...
group by ...
order by .... set nocount off
select * from @t
不能忽悠我啊...
if object_id(N'[tempdb].[dbo].[#Sun_Tmpone]') is not null
drop table #Sun_Tmpone
create table #Sun_Tmpone
(
ID int IDENTITY (1,1) not null,
XYrowcol nvarchar(50),
PhoneInfo nvarchar(50),
TerminalID int
primary key (ID)
)
select * into #Sun_Tmpone from
(
SELECT (str(XRow)+'--'+ltrim(str(YColumn))) as XYrowcol ,(c.BrandName+' '+b.TerminalModel) as PhoneInfo,a.TerminalID from InteHel_ExhibitTerminal a
inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
inner join InteHel_Brand c on b.BrandID=c.BrandID
where a.ExhibitID=5
)
Select * from #Sun_Tmpone
truncate table #Sun_Tmpone
select * into #Sun_Tmpone from
(
SELECT (str(XRow)+'--'+ltrim(str(YColumn))) as XYrowcol ,(c.BrandName+' '+b.TerminalModel) as PhoneInfo,a.TerminalID from InteHel_ExhibitTerminal a
inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
inner join InteHel_Brand c on b.BrandID=c.BrandID
where a.ExhibitID=5
)那我这么写的有错了?
(
SELECT (str(XRow)+'--'+ltrim(str(YColumn))) as XYrowcol ,(c.BrandName+' '+b.TerminalModel) as PhoneInfo,a.TerminalID from InteHel_ExhibitTerminal a
inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
inner join InteHel_Brand c on b.BrandID=c.BrandID
where a.ExhibitID=5
)t----这里加个t
我创建之前 会删除一次的。但现在 貌似 from 后的那个 (这里select出来数据)这么写 不对啊。
恩,这个我刚刚忘了,后来加了 还是不行。我执行if object_id(N'[tempdb].[dbo].[#Sun_Tmpone]') is not null
drop table #Sun_Tmpone 命令成功!
在执行create table #Sun_Tmpone
(
ID int IDENTITY (1,1) not null,
XYrowcol nvarchar(50),
PhoneInfo nvarchar(50),
TerminalID int
primary key (ID)
)命令成功!在执行select * into #Sun_Tmpone from
(
SELECT (str(XRow)+'--'+ltrim(str(YColumn))) as XYrowcol ,(c.BrandName+' '+b.TerminalModel) as PhoneInfo,a.TerminalID from InteHel_ExhibitTerminal a
inner join InteHel_Terminal b on a.TerminalID=b.TerminalID
inner join InteHel_Brand c on b.BrandID=c.BrandID
where a.ExhibitID=5
) tempsun
的时候 就会报 数据库中已存在名为 '#Sun_Tmpone' 的对象。 这个错误了。
会自己创建表 不用人为的创建
在select into 前判断表是否存在,如果存在,则删除。
drop table #Sun_Tmpone
GO -----这里加个GO
大哥,我也想啊。.net里面 封装了 dataset datatable IList 之类的东西vc我就不知道了,我同事找我要的要么是个长 字符串,他去分割,要么就是1个临时表 他去查。你说我能咋搞