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
。