Sql server 带有表变量的LIKE语句

Sql server 带有表变量的LIKE语句,sql-server,Sql Server,我想使用表变量中的值执行SELECT语句 declare @emailids TABLE (usrmst_id INT) declare @actionids TABLE (tskmst_id INT) insert into @emailids (usrmst_id) select usrmst_id from usrmst where usrmst_domain = 'EMAIL' insert into @actionids (tskmst_id)

我想使用表变量中的值执行
SELECT
语句

declare @emailids   TABLE (usrmst_id INT)
declare @actionids  TABLE (tskmst_id INT)

insert into @emailids (usrmst_id)
    select usrmst_id 
    from usrmst 
    where usrmst_domain = 'EMAIL'

insert into @actionids (tskmst_id)
    select tm.tskmst_id 
    from tskmst tm
    inner join tskmail tml 
        on tml.tskmail_id = tm.tskmst_id
    where 
        tskmail_to_int like '%' + (select cast(usrmst_id as CHAR(5)) from @emailids) + '%'

select * from @actionids

这显然是失败的,因为@emailids的
select cast(usrmst_id为CHAR(5))有多个结果。我要做的是为
@emailids
表中的每个值生成一个返回到
@actionids
表中。

您可以尝试使用
内部联接来代替:

insert into @actionids (tskmst_id)
    select tm.tskmst_id 
    from tskmst tm
    inner join tskmail tml 
        on tml.tskmail_id = tm.tskmst_id
    inner join @emailids e
        on tskmail_to_int like '%' + cast(e.usrmst_id as varchar(5)) + '%'


您应该
CAST
VARCHAR
而不是
CHAR
。我相信,强制转换到
CHAR
会在字符串中填充空格,直到它达到定义的长度。因此,当您
60转换为
CHAR(5)
时,它将变成
60[space][space][space][space]

您尝试过吗?从usrmst中选择DISTINCT usrmst_id,其中usrmst_domain='EMAIL'@Beto-域'EMAIL'中的每个值只有一个usrmst_id,因此我不需要执行DISTINCT。这不会导致我失败,但它不会返回任何值,应该返回。我在试着理解这是为什么。如果我将tskmail_上的最后一行改为“%”int,比如“%”+'60'+'%
,这是@emailids中的一个值,它确实会为表中的每个值返回一个值(显然是相同的值),但在您输入的代码中它不会这样做。请尝试强制转换为
VARCHAR
,而不是
CHAR