Sql 构建临时表/映射

Sql 构建临时表/映射,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在SQL Server 2000中处理一个存储过程,其临时表定义如下: CREATE TABLE #MapTable (Category varchar(40), Code char(5)) 创建表之后,我想插入一些标准记录,然后在过程中动态补充这些记录。每个类别(大约10个)将有几个代码(通常为3-5个),我想在一个语句中表示每个类别的插入操作 你知道怎么做吗 到目前为止,我最好的想法是在数据库中保留一个真正的表作为模板,但如果可能的话,我真的希望避免这样做。它将驻留的数据库是大型机系统的

我正在SQL Server 2000中处理一个存储过程,其临时表定义如下:

CREATE TABLE #MapTable (Category varchar(40), Code char(5)) 创建表之后,我想插入一些标准记录,然后在过程中动态补充这些记录。每个类别(大约10个)将有几个代码(通常为3-5个),我想在一个语句中表示每个类别的插入操作

你知道怎么做吗

到目前为止,我最好的想法是在数据库中保留一个真正的表作为模板,但如果可能的话,我真的希望避免这样做。它将驻留的数据库是大型机系统的快照,因此整个数据库每天晚上都会被吹走,并在批处理过程中重新创建—存储过程在过程结束时从源代码管理重新加载


我试图解决的问题与其说是将其保留在一条语句中,不如说是试图避免反复键入类别名称。

这可能适合您:

CREATE TABLE #MapTable (Category varchar(40), Code char(5))

INSERT INTO #MapTable 
SELECT X.Category, X.Code FROM
(SELECT 'Foo' as Category, 'AAAAA' as Code
UNION
SELECT 'Foo' as Category, 'BBBBB' as Code
UNION
SELECT 'Foo' as Category, 'CCCCC' as Code) AS X

SELECT * FROM #MapTable

DJ是一个很好的解决方案,但可以简化,见下文

为什么它需要一个单独的语句

有什么问题吗

insert into #MapTable (category,code) values ('Foo','AAAAA')
insert into #MapTable (category,code) values ('Foo','BBBBB')
insert into #MapTable (category,code) values ('Foo','CCCCC')
insert into #MapTable (category,code) values ('Bar','AAAAA')
对我来说,这更容易阅读和维护

简化DJ解决方案:

CREATE TABLE #MapTable (Category varchar(40), Code char(5))

INSERT INTO #MapTable (Category, Code)
SELECT 'Foo', 'AAAAA'
UNION
SELECT 'Foo', 'BBBBB'
UNION
SELECT 'Foo', 'CCCCC' 

SELECT * FROM #MapTable
DJ没有什么问题,只是我觉得太复杂了

从OP:

我试图解决的问题与其说是一个陈述,不如说是一个陈述 正在尝试避免反复键入类别名称

我感受到了你的痛苦——我也试图找到这样的捷径,并意识到当我解决问题时,我已经可以用手写的方式打字了

如果要输入大量重复数据,我有时会使用Excel为我生成插入代码。将类别放在一列中,将代码放在另一列中;使用所有有用的复制技术来完成艰苦的工作

然后

在第三行,我已经生成了我的插入


当然,所有这些都是假设不能从系统表中提取类别和代码。

这是我最后使用的符号。它基于Arvo的答案,但略短一些,并使用cAse帮助使事情更清楚:

insert into #maptable (category, code) select 'foo1', b.bar from ( select 'bar11' as bar union select 'bar12' union select 'bar13' ) b union select 'foo2', b.bar from ( select 'bar21' as bar union select 'bar22' union select 'bar23' ) b
SELECT 'foo1', b.code
FROM ( select 'bar11' as code
 union select 'bar12'
 union select 'bar13' ) b

UNION SELECT 'foo2', b.code
FROM ( select 'bar21' as code
 union select 'bar22' 
 union select 'bar32' ) b

这种方式会稍微突出显示类别名称,垂直排列代码,并使用较少的垂直空间。

是的,通常我也会按照您的方式来做,但OP希望在一个语句中完成:-使用Excel生成语句有优点upvote,但我想我会使用颤栗工会的答案,因为它比较短。与其说它是一句话,不如说它是避免重复键入类别。不幸的是,我认为这可能是我能做的最好的:
SELECT 'foo1', b.code
FROM ( select 'bar11' as code
 union select 'bar12'
 union select 'bar13' ) b

UNION SELECT 'foo2', b.code
FROM ( select 'bar21' as code
 union select 'bar22' 
 union select 'bar32' ) b