好的......這是我得到了。什麼功能(如果有的話)我可以用它來從一個表中選擇的信息從一個數據庫到另一個數據庫?
表A - 保留產品信息,最相關的是產品說明,我們稱之爲A_DESC - A_DESC每行包含幾個字,約2500行信息。表B由B_ID(唯一主鍵),B_WORD(來自A_DESC的唯一字)和B_SEED組成.B_ID(唯一主鍵),B_WORD(來自A_DESC的唯一字),B_SEED (這個詞可以在表A中找到的次數)。
我正在考慮編寫一個VB腳本來從表A中選擇信息到一個記錄集(或現在稱爲它的數據集)中,然後循環遍歷每一行,按空格分隔值以獲取每個單詞,然後如果該單詞不存在,並且如果它確實存在,則將該單詞插入到表B中,並且如果它確實存在,則將B_SEED計數增加1.
然後我想也許這是可以直接從SQL Server通過Management Studio?有沒有一個函數可以編寫來實現這個功能,而不需要vb作爲中間人?該腳本將只需要一年2-3次,也許運行與表A.任何新的話,我覺得好像在VB比我需要會使用更多的資源寫這篇更新表B中......
希望我已經確定了我想要完成的事情。
我會盡量在視覺上解釋...
Table A _
A_DESC = "Type 4 felt"
A_DESC = "Type 6 felt"
-->
Table B _
B_ID = 1 | B_WORD = 'Type' | B_SEED = 2
B_ID = 2 | B_WORD = '4' | B_SEED = 1
B_ID = 3 | B_WORD = 'felt' | B_SEED = 2
B_ID = 4 | B_WORD = '6' | B_SEED = 1
噢... 編輯
我忘了補充,表A是在不同的數據庫表B(雖然在同一臺服務器)
第二個編輯的
嘗試@ jhinkley的答案 - 並收到以下錯誤:
Msg 166, Level 15, State 1, Line 1
'CREATE/ALTER FUNCTION' does not allow specifying the database name as a prefix to the object name.
Msg 137, Level 15, State 2, Line 10
Must declare the scalar variable "@s".
Msg 1087, Level 15, State 2, Line 12
Must declare the table variable "@t".
用下面的代碼:
CREATE FUNCTION ROOF.[dbo].[Split] (@sep VARCHAR(32), @s VARCHAR(MAX))
RETURNS @t TABLE
(
val VARCHAR(MAX)
)
AS
BEGIN
DECLARE @xml XML
SET @XML = N'<root><r>' + REPLACE(@s, @sep, '</r><r>') + '</r></root>'
INSERT INTO @t(val)
SELECT r.value('.','VARCHAR(5)') as Item
FROM @xml.nodes('//root/r') AS RECORDS(r)
RETURN
END
truncate table website.dbo.TEXT_WORDS
insert into website.dbo.TEXT_WORDS(T_WORD,T_SEED)
select val,count(val)
from ROOF.dbo.IV00101
cross apply ROOF.dbo.Split(' ', replace(ROOF.dbo.IV00101.ITEMDESC,'&','&'))
group by val
我錯過了什麼?
您可以與您正在使用什麼版本的SQL的MERGE語句......很容易地做到這一點? –
A_DESC是單列嗎?如果是這樣,最難的部分將分開的話。在這裏有幾篇關於用分隔符分割SQL字符串的文章,那麼你應該能夠相對容易地使用插入語句中的輸出。 – Jaloopa
SQL '08 A_DESC是一個表中的單個列,大約有30個列 – Kizzelwhix