我想要做的是在文本列中搜索LIKE值串列中的任何內容。
帶有文本列的表非常大,所以我無法加入LIKE '%' valuename '%'(臨時表的值串列并不是很大)。
我以為我會嘗試這樣做,但我需要%在動態WHERE子句中使用單引號。也許這是不可能的。
下面是一個例子:
CREATE TABLE #SearchValues (valuename VARCHAR(20))
INSERT INTO #SearchValues
VALUES ('Red235'), ('Blue678'), ('2Purple'), ('63Cyan'),('99Black')
CREATE TABLE #TextTable (textfield VARCHAR(300))
INSERT INTO #TextTable
VALUES ('"Red235"'), ('blah and [99Black]'), ('something else'), ('n'),
('63Cyan'), ('other text'), ('nothing'), ('[2Purple]'), ('')
SELECT
-- this would be it except that it needs the single quotes around the %
WhereClauseIWant = STUFF((SELECT ' OR valuename LIKE %' valuename '%'
FROM #SearchValues
FOR XML PATH('')), 1, 19, '')
SELECT *
FROM #TextTable
WHERE textfield LIKE STUFF((SELECT ' OR valuename LIKE ' '%' valuename '%'
FROM #SearchValues
FOR XML PATH('')), 1, 19, '')
uj5u.com熱心網友回復:
理想情況下,您應該只EXISTS在靜態查詢中使用謂詞。
SELECT *
FROM #TextTable T
WHERE EXISTS (SELECT 1
FROM #SearchValues s
WHERE t.textfield LIKE '%' s.valuename '%'
);
如果您真的開始使用動態 SQL,您顯然需要EXEC,并且您需要安全地執行此操作。你也有一些錯別字。
注意QUOTENAME安全注入和.value防止 XML 物體化的使用。
DECLARE @sql nvarchar(max) = N'
SELECT *
FROM #TextTable
WHERE 1=0
' (
SELECT '
OR textfield LIKE ' QUOTENAME('%' valuename '%', '''')
FROM #SearchValues
FOR XML PATH(''), TYPE
).value('text()[1]','nvarchar(max)');
PRINT @sql; -- for testing
EXEC sp_executesql @sql;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/325199.html
標籤:sql sql-server 查询语句
上一篇:分組分頁
