我正在使用如下定义的临时表在SQL Server 2000中处理存储过程:
CREATE TABLE #MapTable (Category varchar(40), Code char(5))
创建表后,我想插入一些标准记录(然后在程序中动态补充).每个类别(大约10个)将有几个代码(通常为3-5),我想在一个语句中表达每个类别的插入操作.
知道怎么做吗?
到目前为止,我所拥有的最好的想法是将数据库中的真实表作为模板,但我真的希望尽可能避免这种情况.这将存在的数据库是大型机系统的快照,这样整个数据库每晚都被吹走并在批处理过程中重新创建 - 存储过程在流程结束时从源代码控制中重新加载.
我试图解决的问题不是将它保留在一个语句中,因为它试图避免一遍又一遍地重新键入类别名称.
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为我生成插入代码.将类别放在一列中,将代码放在另一列中; 使用所有有用的复制技术来完成艰苦的工作
然后
="insert into #MapTable (category,code) values ('"&A1&"','"&B1&"')"
在第三行,我已经生成了我的插入
当然,所有这些都假设无法从系统表中提取类别和代码.