Sql server SQL如何比较变量是否与数据库列中的值相同?

Sql server SQL如何比较变量是否与数据库列中的值相同?,sql-server,tsql,Sql Server,Tsql,我的问题如下: 我使用一个票证系统,它使用插件来实现工作流。 在本例中,我使用SQL对传入的电子邮件进行预排序。 SQL查询如下所示: SELECT Count(Case when {MSG_CC_002_DeviceReg_MailBody} LIKE '%You have received an invoice from%' Then 1 END); 我现在要做的是,不使用LIKE,然后使用上面的某个短语,而是将其与数据库表中包含所有必要短语的列进行比较 该表只有两列,phraseID和p

我的问题如下:

我使用一个票证系统,它使用插件来实现工作流。 在本例中,我使用SQL对传入的电子邮件进行预排序。 SQL查询如下所示:

SELECT Count(Case when {MSG_CC_002_DeviceReg_MailBody} LIKE '%You have received an invoice from%' Then 1 END);
我现在要做的是,不使用LIKE,然后使用上面的某个短语,而是将其与数据库表中包含所有必要短语的列进行比较

该表只有两列,phraseID和phrase。 {MSG_CC_002_DeviceReg_MailBody}是需要与列的值进行比较的变量。 因此,如果变量与列中的一个条目匹配,它应该只返回1

[编辑:] 这只是我想使用它的原因之一,我还有一个变量{MSG_CC_002_DeviceReg_mailssender},它将提供我想要与包含电子邮件地址的类似表进行比较的电子邮件地址

这可能吗?
如果是,如何实现?

是的,这是可能的,您可以通过使用动态查询来实现这一点。基本上,您需要将查询构造为字符串,然后执行它

您可以在以下链接中找到有关动态查询的示例和更多信息


是的,这是可能的,您可以通过使用动态查询来实现这一点。基本上,您需要将查询构造为字符串,然后执行它

您可以在以下链接中找到有关动态查询的示例和更多信息

您可以使用联接或子查询:

select count(*)
from t
where exists (select 1
              from othertable ot
              where {MSG_CC_002_DeviceReg_MailBody} LIKE '%' + ot.phrase + '%' 
             ) ;
您可以使用联接或子查询:

select count(*)
from t
where exists (select 1
              from othertable ot
              where {MSG_CC_002_DeviceReg_MailBody} LIKE '%' + ot.phrase + '%' 
             ) ;

如果你有很多短语或电子邮件地址,这会很慢,但它会给你想要的

SELECT COUNT(*) AS RetValue
FROM PhraseTable 
WHERE {MSG_CC_002_DeviceReg_MailBody} LIKE '%' + phrase + '%'; 

如果你有很多短语或电子邮件地址,这会很慢,但它会给你想要的

SELECT COUNT(*) AS RetValue
FROM PhraseTable 
WHERE {MSG_CC_002_DeviceReg_MailBody} LIKE '%' + phrase + '%'; 

我很清楚,你想将邮件体与短语表中的每个值进行比较?我很清楚,你想将邮件体与短语表中的每个值进行比较?为了扩展Serdar的答案,你甚至可以让存储过程创建动态SQL。因此,您所要做的就是为过程提供一个变量,它将返回答案。另请参见:为了扩展Serdar的答案,您甚至可以让存储过程创建动态SQL。因此,您所要做的就是为过程提供一个变量,它将返回答案。另见:很高兴它起了作用。如果您能接受答案,请点击左侧的灰色复选标记,我将不胜感激!很高兴这有帮助。如果您能接受答案,请点击左侧的灰色复选标记,我将不胜感激!