好的...这就是我得到的。
表 A - 保存产品信息,最相关的是产品描述,我们称之为 A_DESC - A_DESC 每行包含几个单词,大约有 2500 行信息。
表 B - 目前还没有任何内容,但每行包含与表 A 相关的单个单词。表 B 由 B_ID(唯一主)、B_WORD(来自 A_DESC 的唯一单词)和 B_SEED(次数该词可以在表 A 中找到)。
我正在考虑编写一个 vb 脚本来将表 A 中的信息选择到记录集(或现在称为数据集)中,然后遍历每一行,按空格分割值以单独获取每个单词,然后将该单词插入表 B 仅当该单词尚不存在时,如果确实存在,则将 B_SEED 计数增加 1。
然后我想也许这可以通过管理工作室直接从 SQL Server 实现?在没有 vb 作为中间人的情况下,我是否可以编写一个函数来完成此任务?这个脚本每年只需要运行 2-3 次就可以用表 A 中的任何新词更新表 B。我觉得在 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 位于不同的数据库中(虽然在同一台服务器上)
第二次编辑
尝试了@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
我错过了什么?