此查询为我提供错误:“建议”附近的语法错误。子查询中含有来自查询表的条件的containstable
SELECT(SELECT COUNT(*) FROM CONTAINSTABLE(Products,keywords,Suggestion)) InventoryRank
FROM (
SELECT Suggestion FROM aTable
)
我该如何给出相同的结果?
此查询为我提供错误:“建议”附近的语法错误。子查询中含有来自查询表的条件的containstable
SELECT(SELECT COUNT(*) FROM CONTAINSTABLE(Products,keywords,Suggestion)) InventoryRank
FROM (
SELECT Suggestion FROM aTable
)
我该如何给出相同的结果?
CONTAINSTABLE在搜索条件下无法使用表列。你可以把它想:
DECLARE @search nvarchar(4000)
SELECT @search = STUFF((
SELECT '*" or "' + Suggestion
FROM aTable
FOR XML PATH('')
),1,6,'') +'*"'
--That will give you string like "sug1*" or "sug2*" or "sug3*" to search
--You can make whatever you need string. F.e. "sug1" or "sug2" or "sug3"
SELECT COUNT (*)
FROM CONTAINSTABLE(searched_table,searched_column,@search)
编辑
如果你需要每Suggestion
不同InventoryRank
,您可以使用动态SQL和临时表:
IF OBJECT_ID(N'##temp') IS NOT NULL DROP TABLE ##temp
CREATE TABLE ##temp (
Suggestion nvarchar(max),
InventoryRank int
)
DECLARE @sql nvarchar(max)
SELECT @sql = (
SELECT N'INSERT INTO ##temp SELECT '''+Suggestion+''' as Suggestion, COUNT (*) as InventoryRank FROM CONTAINSTABLE(searched_table,searched_column,'''+Suggestion+''');'
FROM aTable
FOR XML PATH('')
)
--PRINT(@sql)
EXEC sp_executesql @sql
SELECT *
FROM ##temp
PRINT会给您查询:
INSERT INTO ##temp SELECT 'sug1' as Suggestion, COUNT (*) as InventoryRank FROM CONTAINSTABLE(searched_table,searched_column,'sug1');
INSERT INTO ##temp SELECT 'sug2' as Suggestion, COUNT (*) as InventoryRank FROM CONTAINSTABLE(searched_table,searched_column,'sug2');
所以你do'nt需要一个WHILE循环或光标通过的所有行aTable
运行的CONTAINSTABLE
第三个参数必须是文字或变量,它不能是列名。如果你需要每个建议的数量,你可以尝试以下方法:
DECLARE @suggestion varchar(100);
DECLARE @result table (Suggestion varchar(100), Result int);
DECLARE csr CURSOR FOR SELECT Suggestion FROM aTable;
FETCH NEXT FROM csr INTO @suggestion;
WHILE @@FETCH_STATUS = 0 BEGIN
INSERT INTO @result (Suggestion, Result)
SELECT @suggestion, (SELECT COUNT(*) FROM CONTAINSTABLE(Products,keywords,@suggestion));
FETCH NEXT FROM csr INTO @suggestion;
END
CLOSE csr;
DEALLOCATE csr;
SELECT * FROM @result;
MSDN CONTAINSTABLE (Transact-SQL)文档。
'SELECT建议从一张表返回一个或多个行吗? – wdosanjos
@wdosanjos:它返回多行 – Mohsen