我有一个名为'languages'的列,但它有以下类型的值:
english; polish; portuguese;
..等等。
我想拆分,所以我可以将它插入另一个表中:
english
polish
portugese
继续。
我已经在Google搜索并找到了这个拆分功能:
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 pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
我已经用它测试了它:
SELECT * FROM dbo.Split(' ', 'I hate bunnies')
所以我试着让这个适应我的情况:
INSERT INTO labbd11..language(language) SELECT s FROM dbo.Split(';', disciplinabd..movies.languages)
然后它给了我这个例外:
The multi-part identifier "disciplinabd..movies.languages" could not be bound. Severity 16
有什么想法吗?
祝你好运, Valter Henrique。
答案 0 :(得分:2)
使用CROSS APPLY
INSERT INTO labbd11..language(language)
SELECT DISTINCT s.s
FROM disciplinabd..movies m
CROSS APPLY dbo.Split(';', m.languages) S
但是,如果我正确阅读了您的查询,您将从所有影片中分割语言,并将影片中的结果语言插入语言表(仅限1列)。希望这是一个测试查询,否则它根本没有商业价值。