我做了這個功能,允許我在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一排「奶酪黨的樂趣」,它導致成
奶酪
黨
樂趣
現在我想這些在一個表中插入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'將返回所有必需的行。這段代碼是從哪裏複製的? –