在存储过程中创建动态全局临时表 [英] Creating a dynamic Global Temp Table within a stored procedure

查看:90
本文介绍了在存储过程中创建动态全局临时表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




我希望根据

参数创建一个名称是动态的临时表。


ALTER PROCEDURE [dbo]。[generateTicketTable]


@ PID1 VARCHAR(50),

@ PID2 VARCHAR(50),

@TICKET VARCHAR(20)

AS

BEGIN


设置NOCOUNT ON;


DECLARE @DATA XML


SET @DATA =(SELECT dbo.getHistoryLocationXMLF(@ PID1,@ PID2)as data)

CREATE TABLE ## @ TICKET(DATA XML)


INSERT INTO ## @ TICKET VALUES(@DATA)


END

是我到目前为止 - 虽然它只是创建了一个名为

## @ TICKET的表 - 这不是我想要的。我希望它来评估名称。


任何想法?

解决方案

Am 6 2006年9月22:14:18 -0700 schrieb pu*******@gmail.com


hi,


我希望创建一个临时表,其名称是动态的,基于

参数。


ALTER PROCEDURE [dbo]。[generateTicketTable]


@ PID1 VARCHAR(50),

@ PID2 VARCHAR(50),

@TICKET VARCHAR(20)

AS

BEGIN


设置NOCOUNT ON;


DECLARE @DATA XML


SET @DATA =(SELECT dbo.getHistoryLocationXMLF(@ PID1,@ PID2)作为数据)

CREATE TABLE ## @ TICKET(数据XML)


插入## @门票价值(@DATA)


结束


到目前为止我所拥有的 - 虽然它只是创建一个名为

的表## @ TICKET - 这不是我的意思NT。我希望它来评估这个名字。


任何想法?



对创建语句使用EXECUTE:

....

EXEC('''创建表# #''+ @TICKET +''(数据XML)'')

....


再见,Helmut


(pu ******* @ gmail.com)写道:


我想创建一个临时表''根据

参数,名称是动态的。



为什么?虽然你可以像赫尔穆特所说的那样做,但这个想法听起来并不合理。

。如果您解释了您的实际业务问题,我们或许可以建议更好的解决方案。


-

Erland Sommarskog ,SQL Server MVP, es****@sommarskog.se


联机丛书for SQL Server 2005
http ://www.microsoft.com/technet/pro...ads/books.mspx

SQL Server 2000联机丛书
http://www.microsoft.com/sql/prodinf...ons/books.mspx


>我希望创建一个临时表,其名称动态地基于参数sic:parameter]。 <


不在RDBMS中!你错过了表格的基本概念。它是b $ b在现实世界中建立实体或关系的模型。要在飞行中创建表格

就是要有一个大象或任何其他

实体可以从天而降的世界。

接下来,使用任何类型的临时表都表明SQL编程很糟糕。

这就像在1950年代的文件系统中挂一个临时磁带一样,所以

你可以做一系列程序步骤,而不是使用声明性的

编程。


什么是真正的问题?不要告诉我们你想要什么样的污泥。


hi,

I wish to create a temporary table who''s name is dynamic based on the
argument.

ALTER PROCEDURE [dbo].[generateTicketTable]

@PID1 VARCHAR(50),
@PID2 VARCHAR(50),
@TICKET VARCHAR(20)
AS
BEGIN

SET NOCOUNT ON;

DECLARE @DATA XML

SET @DATA = (SELECT dbo.getHistoryLocationXMLF (@PID1, @PID2) as data)
CREATE TABLE ##@TICKET (DATA XML)

INSERT INTO ##@TICKET VALUES(@DATA)

END
is what i have so far - although it just creates a table with a name of
##@TICKET - which isn''t what i want. I want it to evaluate the name.

any ideas?

解决方案

Am 6 Sep 2006 22:14:18 -0700 schrieb pu*******@gmail.com:

hi,

I wish to create a temporary table who''s name is dynamic based on the
argument.

ALTER PROCEDURE [dbo].[generateTicketTable]

@PID1 VARCHAR(50),
@PID2 VARCHAR(50),
@TICKET VARCHAR(20)
AS
BEGIN

SET NOCOUNT ON;

DECLARE @DATA XML

SET @DATA = (SELECT dbo.getHistoryLocationXMLF (@PID1, @PID2) as data)
CREATE TABLE ##@TICKET (DATA XML)

INSERT INTO ##@TICKET VALUES(@DATA)

END
is what i have so far - although it just creates a table with a name of
##@TICKET - which isn''t what i want. I want it to evaluate the name.

any ideas?

Use EXECUTE for the create statement:
....
EXEC(''CREATE TABLE ##'' + @TICKET + '' (DATA XML)'')
....

bye, Helmut


(pu*******@gmail.com) writes:

I wish to create a temporary table who''s name is dynamic based on the
argument.

Why? While you can do as Helmut suggest, the idea does not appear sound
at all. If you explain your real business problem, we might be able to
suggest a better solution.

--
Erland Sommarskog, SQL Server MVP, es****@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/pro...ads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinf...ons/books.mspx


>I wish to create a temporary table whose name is dynamically based on the argument sic: parameter]. <<

Not in an RDBMS! You missed the basic concepts of what a table is. It
models an entity or relationship in a real world. To have tables
created on the fly is to have a world in which elephants or any other
entity at all can fall from the sky.

Next, using temp tables of any kind is a sign of poor SQL programming.
This is just like hanging a scratch tape in a 1950''s file system, so
you can do a sequence of procedural steps instead of using declarative
programming.

What is the REAL problem? Don''t tell us what kind of kludge you want.


这篇关于在存储过程中创建动态全局临时表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆