将表与数据之间的空格进行比较,表中没有空格。
表A中的数据填充到表B.我需要将MINUS查询写为表A作为源,表B作为目标
表A和表B中的样本数据: -
表A有三个字段:ID,Cd_1和Cd_2
字段:Cd_1或Cd_2在代码之间可以有空格。下面的示例在Code_1
中的X和Y之间有两个空格ID | Cd_1 | Cd_2
-----------
1 | X Y | Z
表B有两个字段:ID,Cd
表B应该填充Cd_1中的代码(非空格)和表A中的Cd_2
示例:
ID | Cd
--------
1 | X
1 | Y
1 | Z
答案 0 :(得分:0)
有一个表函数用于根据分隔符(space ='')分割字符串。
CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
因此,要将表A中的代码插入表B,您可以使用此查询:
DECLARE @st1 as varchar(max),@st2 as varchar(max), @PractitionerId int
DECLARE MY_CURSOR CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR
SELECT distinct ID
FROM [dbo].[TableA]
OPEN MY_CURSOR
FETCH NEXT FROM MY_CURSOR INTO @PractitionerId
WHILE @@FETCH_STATUS = 0
BEGIN
select @st1 = Cd_1, @st2 = Cd_2
from [dbo].[TableA]
WHERE ID = @PractitionerId
INSERT INTO tableB (ID, Cd) select @PractitionerIdas ID ,* from dbo.Split(' ', @st1)
INSERT INTO tableB (Id, Cd) select @PractitionerIdas ID,* from dbo.Split(' ', @st2)
FETCH NEXT FROM MY_CURSOR INTO @PractitionerId
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR