您误解了SQL Server中字符串的处理方式。你有的字符串(
‘’’Sales Entry Grid Cursor’’,’’Customer Mandatory’’,’’Coloum Uom’’,’’Show Marka’’,’’Show Discount Amount In Grid’’,’’Show Discount % In Grid’’,’’Calculation based on Weight *rate’’’
)是
的
一
</强>
字面值,而不是多个值。
IN
不会对它“起作用”,因为它正在寻找一行具有整个字符串的值
PageConfig_settingsName
。
这里有2个选项。首先是分割你的字符串并进行比较:
SELECT pageconfig_action
FROM [RetailSoft].[dbo].[tbl_pageconfig]
CROSS APPLY STRING_SPLIT(@setting, ‘,’) SS
WHERE [PageConfig_settingsName] = SS.[value]
AND PageConfig_CompanyId = 1;
</code>
请注意,您不需要每个项目周围的引号(除非它们的值中确实有这些引号)
如果您不在SQL Server 2016+上搜索delimitedsplit8k(如果您在2008年),或者如果您在2012/2014,则为delimitedsplit8k_lead。
否则,您可以使用表值变量并分别传递每个值:
DECLARE @Setting table (setting varchar(255));
INSERT INTO @Setting (setting)
VALUES (‘Sales Entry Grid Cursor’),
(‘Customer Mandatory’),
(‘Coloum Uom’),
(‘Show Marka’),
(‘Show Discount Amount In Grid’),
(‘Show Discount % In Grid’),
(‘Calculation based on Weight *rate’);
SELECT P.pageconfig_action
FROM [RetailSoft].[dbo].[tbl_pageconfig] P
JOIN @Setting S ON S.setting = P.[PageConfig_settingsName]
WHERE P.PageConfig_CompanyId = 1;
</code>