日期:2014-05-16  浏览次数:20489 次

sql 读取表数据插入其它多个表
需求:已知A表保存了其它表需要的数据,现要把A表字段拆分,分别插入其它多个表
求一个存储过程,实现把A表拆分,分别插入其它标
------解决方案--------------------
太虚了,详细一点。
------解决方案--------------------
请给出A表字段的格式
------解决方案--------------------
试试这个:

--CREATE TABLE [dbo].[Message](
-- [id] [int] IDENTITY(1,1) NOT NULL,
-- [Msg_Title] [Nvarchar](80) NOT NULL,
-- [Msg_Content] [Nvarchar](4000) NOT NULL,
-- [Msg_Digest] [int] NULL,
-- [Msg_Class1] [varchar](6) NULL,
-- [Msg_Class2] [varchar](6) NULL,
-- [Msg_Class3] [varchar](6) NULL,
-- [Msg_Class4] [varchar](6) NULL,
-- [Msg_Class5] [varchar](6) NULL,
-- [Msg_Class6] [varchar](6) NULL,
-- [Msg_Class7] [varchar](6) NULL,
-- [Msg_Class8] [varchar](6) NULL,
-- [Msg_Class9] [varchar](6) NULL,
-- [Msg_Class10] [varchar](6) NULL,
-- [Msg_Class11] [varchar](6) NULL,
-- [Msg_Class12] [varchar](6) NULL,
-- [Msg_Class13] [varchar](6) NULL,
-- [Msg_Class14] [varchar](6) NULL,
-- [Msg_Class15] [varchar](6) NULL,
-- [Msg_Class16] [varchar](6) NULL,
-- [Msg_Class17] [varchar](6) NULL,
-- [Msg_Class18] [varchar](6) NULL,
-- [Msg_Class19] [varchar](6) NULL,
-- [Msg_Class20] [varchar](6) NULL,
-- [Msg_Class21] [varchar](6) NULL,
-- [Msg_Class22] [varchar](6) NULL,
-- [Msg_Class23] [varchar](6) NULL,
-- [CreateTime] [datetime] NULL,
-- [KeyWords] [Nvarchar](255) NULL,
-- [Msg_Class24] [varchar](6) NULL
--) ON [PRIMARY]
--INSERT INTO [Message]([Msg_Title],[Msg_Content],[KeyWords])
--VALUES(N'秋季将至慎防幼儿肺炎。',N'秋季如何预防幼儿肺炎?首先要保持室内空气清新。经常开窗换气,温度保持20~25℃,并维持一定的湿度。让宝宝保持侧卧位睡姿、头部抬高,保持呼吸道通畅。注意多喂温开水,食物要少量多餐,清淡易消化;新生儿要尽量母乳喂养,以增强宝宝呼吸道抗病能力。',N'肺炎
------解决方案--------------------
咳嗽
------解决方案--------------------
发烧
------解决方案--------------------
呼吸
------解决方案--------------------
看病')
--插入B表


INSERT INTO B([Msg_Title])
SELECT [Msg_Title] FROM [MESSAGE] WHERE id=xx  --用游标一条一条读
SELECT @maxid=@@IDENTITY

--插入C表:
INSERT INTO c(bid,[content])
SELECT @maxid,Msg_Content
FROM b
WHERE id=xx  --用游标一条一条读

--d
--第一步:创建函数
IF OBJECT_ID('f_getstr') IS NOT NULL
    DROP FUNCTION  f_getstr
GO
CREATE FUNCTION f_getstr(
@s     NVARCHAR(4000),  --待分拆的字符串
@flag  NVARCHAR(10)=''  --数据分隔符
)RETURNS @r TABLE(col NVARCHAR(1000))
AS
BEGIN
  IF ISNULL(@flag,'')='' AND LEN(ISNULL(@flag,'')+'a')=1
    INSERT @r
      SELECT SUBSTRING(@s,number+1,1)
      FROM master..spt_values
      WHERE TYPE='p' and number<LEN(@s+'a')-1
  ELSE
    INSERT @r
      SELECT SUBSTRING(@s,number,CHARINDEX(@flag,@s+@flag,number)-number)
      FROM master..spt_values
      WHERE