わかりました...これが私が得たものです。
表 A - 製品情報を保持します。最も関連性の高いのは製品説明です。これを A_DESC と呼びます。A_DESC には、1 行に複数の単語が含まれており、約 2500 行の情報が含まれています。
テーブル B - まだ何も保持していませんが、テーブル A に関連する行ごとに個々の単語を保持します。テーブル B は、B_ID (一意のプライマリ)、B_WORD (A_DESC からの一意の単語)、および B_SEED (回数その単語は表Aにあります)。
テーブル A からレコードセット (または最近ではデータセットと呼ばれるデータセット) に情報を選択し、各行をループし、値をスペースで分割して各単語を個別に取得し、その単語をに挿入する vb スクリプトを作成することを考えていました。テーブル B はその単語がまだ存在しない場合にのみ、存在する場合は B_SEED カウントを 1 増やします。
次に、Management studio を介して SQL Server から直接これが可能であると考えましたか? 仲介者としてvbを持たずにこれを達成するために書くことができる関数はありますか? このスクリプトは、テーブル A の新しい単語でテーブル B を更新するために、おそらく年に 2 ~ 3 回実行するだけで済みます。これを VB で書くと、必要以上のリソースを使用するように感じます...
うまくいけば、私は自分が達成したいことを確立しました。
視覚的に説明しようと思います...
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 とは異なるデータベースにあります (ただし、同じサーバー上にあります)。
2 回目の編集
@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
私は何か見落としてますか?