我觉得编程的话工作量非常大,而且除非你对自己的技术很有自信,否则还是用一些第三方软件吧。比如red-gate,SQLDelta,SQLDeveloperBundle,apexsql这几种
解决方案 »
- 菜鸟T-SQL添加表语句
- 接收到的存储过程返回值被截断了,怎么回事?
- sql server 自动编号问题 ,我想设置a0为起始,第二项自动为a1 这个可行吗?
- conn.execute(sql)执行删除的时候怎么判断找到找不到啊?
- 我在自己的电脑上安装了sql server2000,安装好了以后,启动server就出错,请问是为什么?
- SQL语句:怎样暂停;停止;启动服务管理器?
- 链接数据库出错:provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接
- 为什么在SQL Server Management Studio种看不到维护计划?????????
- sql2008锁死问题,求教大神。
- SP_addlinkedserve 在sqlserver如何连接oracle数据库
- 超奇怪的链接问题,着急,在线等
- sql拼接有问题。求大神
你是说写sql的工作量大吗?
那么还是用程序来实现这个工作吧,毕竟我自己写程序比写sql要容易的多你说的第三方软件是用来sql编程的吗?
需要修改的只是程序读取附加的地方吧
2005以上可以类似这样操作select * into #t from(
select 'x' a,'1,2'b
union all
select 'y','1'
union all
select 'z','1,2,3'
)a
select * from #tselect a.Col1,b.Col2
from (
select a as Col1,convert(xml,'<row><b>'+rtrim(replace(b,',','</b><b>'))+'</b></row>') as Col2 from #t)a
outer apply (select Col2=C.v.value('.','nvarchar(100)') from a.COl2.nodes('/row/b')C(v))b /*
a b
---- -----
x 1,2
y 1
z 1,2,3(3 行受影响)Col1 Col2
---- -------
x 1
x 2
y 1
z 1
z 2
z 3(6 行受影响)
*/
至于效率就得看你扩展功能后,需要添加什么属性,需要如何查询,视情况来添加相应的索引
declare @tb table(a varchar(20),b varchar(30))
insert into @tb
select 'x' a,'1,2' b
union all
select 'y','1'
union all
select 'z','1,2,3'select a,
--b,
SUBSTRING(t.b, number ,CHARINDEX(',',t.b+',',number)-number) as split
from @tb t,master..spt_values s
where s.number >=1
and s.type = 'P'
and SUBSTRING(','+t.b,s.number,1) = ','
/*
a split
x 1
x 2
y 1
z 1
z 2
z 3
*/
CREATE TABLE [dbo].[news](
[newsid] [int] NULL,
[attachmentFiles] [varchar](500) NULL,
[newtitle] [varchar](50) NULL
) ON [PRIMARY]CREATE TABLE [dbo].[newsAttachment](
[newsid] [int] NULL,
[filename] [varchar](50) NULL
) ON [PRIMARY]insert into [news]
select 10,'10A;10B','n10' union all
select 11,'11A;11T','n11' union all
select 12,'12C','n12' union all
select 13,'13D;13E','n13' union all
select 14,'14X;14Y;14Z','n14'
-- 数据迁移
insert into newsAttachment(newsid,filename)
select a.newsid,
substring(a.attachmentFiles,b.number,charindex(';',a.attachmentFiles+';',b.number)-b.number)
from news a
inner join master.dbo.spt_values b
on b.type='P' and b.number between 1 and len(a.attachmentFiles)
and substring(';'+a.attachmentFiles,b.number,1)=';'
select * from newsAttachment/*
newsid filename
----------- ---------------
10 10A
10 10B
11 11A
11 11T
12 12C
13 13D
13 13E
14 14X
14 14Y
14 14Z(10 row(s) affected)
*/
学习了.
如果复杂性太高的话,我觉得用数据库编程就代价太高了,用java程序把数据提取出来在处理的话,代价和难度就小得多了