Я сделал эту функцию, которая позволяет мне разделить ячейки на SQL Server.SQL Server - создать или вставить таблицу с результатом «print @variable»
DECLARE @LoopCounter INT = 1, @MaxId INT = 8000, @Hashtag nVarchar(max) =''
WHILE(@LoopCounter <= @MaxId)
BEGIN
SELECT @Hashtag = @Hashtag + ' ' + Item FROM dbo.Split(' ', (SELECT
Hashtags_in_Tweet FROM TwitterSentiment WHERE Tweet_ID = @LoopCounter));
SET @LoopCounter = @LoopCounter + 1
END
print @Hashtag
Я использовал этот код для dbo.Split, который я получил от другого вопроса, публикуемого здесь некоторое время назад:
create FUNCTION [dbo].[Split] (@sep VARCHAR(32), @s VARCHAR(MAX))
RETURNS TABLE
AS
RETURN
(
SELECT r.value('.','VARCHAR(MAX)') as Item
FROM (SELECT CONVERT(XML, N'<root><r>' + REPLACE(REPLACE(REPLACE(@s,'& ','& '),'<','<'), @sep, '</r><r>') + '</r></root>') as valxml) x
CROSS APPLY x.valxml.nodes('//root/r') AS RECORDS(r)
)
Так что, когда у меня есть строка в колонке Hashtags_in_Tweet с «партией весело сыра », это приводит к
Сыр
партия
Fun
Теперь я хочу, чтобы они были вставлены в таблицу Hashs (INT IDENTITY (1,1), VARCHAR (800)) Я создал. Я пробовал с follwing сценария:
DECLARE @LoopCounter INT = 1, @MaxId INT = 100, @Hashtag nVarchar(max) = ''
WHILE(@LoopCounter <= @MaxId)
BEGIN
SELECT @Hashtag = @Hashtag + ' ' + Item FROM dbo.Split(' ', (SELECT
Hashtags_in_Tweet FROM TwitterSentiment WHERE Tweet_ID = @LoopCounter));
SET @LoopCounter = @LoopCounter + 1
END
insert INTO Hashs
Values (@Hashtag)
Но это просто ставит их в один ряд:
ID | Hashtag
1 | Cheese Party fun
В то время как я на самом деле хотел:
ID | Hashtag
1 | Cheese
2 | Party
3 | Fun
Есть способы, чтобы исправить это?
пожалуйста, добавьте код для 'dbo.Split' как хорошо – ughai
@ughai я добавил его – DenStudent
Сохранение разделенных запятыми значений в поле * * очень плохой дизайн. Если бы вы создали отдельную таблицу, у вас не было бы проблем. В любом случае * код явно * создает одну строку. Если вы этого не хотели, просто используйте 'INSERT ... FROM dbo.Split ...', * и * удалите все циклы. 'WHERE Tweet_ID <= 100' вернет все необходимые строки. Был ли этот код скопирован откуда-то? –