【问题标题】:Stored proc + variable contains table row field存储过程 + 变量包含表行字段
【发布时间】:2023-03-04 05:21:01
【问题描述】:

我正在尝试对字段文本包含在变量中的表进行查询。

例子:

表 A

ID     Ref               Processed
----|-----------------|---------
1   |  I want a pool  |   0
2   |  I want a bike  |   0

表 B

ID     Text
----|---------------
1   |  pool
2   |  bike

将所有未处理的行从TableA 获取到#tempTable

select * into #tmpTable from TableA where processed = 0

然后我循环遍历#tmpTable 中的每一行并将@Variable 设置为当前字段Ref

所以第一次通过@Variable = 'I want a pool' 然后@Variable = 'I want a bike'

然后我需要查询TableBText 字段包含在@Variable 中的位置并选择该行。

我知道以下方法不起作用,但这是我需要结束的地方:

select * from TableB where @Variable LIKE '% '+Text+' %'

我正在编辑一个现有的存储过程,所以如果有更好的方法来解决这个问题,我愿意接受所有建议。

【问题讨论】:

    标签: sql stored-procedures sql-server-2012


    【解决方案1】:

    这是你要找的吗?

    select a.*, b.text
    from tableA a join
         tableB b
         on a.processed = 0 and
            ref like '%'+b.text+'%';
    

    编辑:

    如果要匹配空格分隔的单词:

         on a.processed = 0 and
            ' '+ref+' ' like '% '+b.text+' %';
    

    【讨论】:

    • 做错了。另一方面,如果我使用 '%'+Text+' %' 而不是 '%'+Text+'%' 会返回包含完整单词而不是部分单词的行吗?
    • 表达式'%'+b.txt+'%' 将只匹配text 中任何内容的完整单词。
    • 那么匹配整个单词的表达式是什么。例如 POOL 但不是 CARPOOL?考虑到行的开始和结束?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多