如何将表名和列名作为自定义函数中使用的参数传递给SQL CONTAINSTABLE

如何将表名和列名作为自定义函数中使用的参数传递给SQL CONTAINSTABLE,sql,sql-server,tsql,Sql,Sql Server,Tsql,我使用的是全文目录和函数 我的工作代码是: SELECT * FROM CONTAINSTABLE(Genus, Name, '"Al*"') 因此,我创建了这样的自定义函数,它可以工作: CREATE FUNCTION dbo.GetRank () RETURNS @tempRankTable TABLE([key] int, [rank] int) WITH EXECUTE AS CALLER AS BEGIN INSERT INTO @tempRankTable SELECT

我使用的是全文目录和函数

我的工作代码是:

SELECT * FROM CONTAINSTABLE(Genus, Name, '"Al*"')
因此,我创建了这样的自定义函数,它可以工作:

CREATE FUNCTION dbo.GetRank ()
RETURNS @tempRankTable TABLE([key] int, [rank] int)
WITH EXECUTE AS CALLER
AS
BEGIN
     INSERT INTO @tempRankTable SELECT * FROM CONTAINSTABLE(Genus, Name, '"Al*"')

     RETURN;
END
这也是工作代码:

CREATE FUNCTION dbo.GetRank (@table nvarchar(50), @column nvarchar(50), @searchString nvarchar(4000))
RETURNS @tempRankTable TABLE([key] int, [rank] int)
WITH EXECUTE AS CALLER
AS
BEGIN
     INSERT INTO @tempRankTable SELECT * FROM CONTAINSTABLE(Genus, Name, @searchString)

     RETURN;
END
但这不是有效的代码:

我还尝试使用EXEC,但不允许在函数中使用:


有人知道如何将变量传递给CONTAINSTABLE作为表名和列名吗?

上次尝试时@searchstring是否缺少周围的撇号或引号?将文本写入字符串写出该字符串以查看其是否为错误SQL。。。第三种选择是我认为唯一可行的<代码>执行('插入INTO@TempRankTable从CONTAINSTABLE(“++@table+”、“++@column+”、“++@searchstring+”)中选择*也许可以。我100%确定从没有下划线的屏幕截图中看不到遗漏的撇号或引号。我看到函数中不允许使用EXEC:正确。这是一个范围问题。有几个例子似乎引用了使用CLR。嗯,是的,但仍然不知道如何将其作为参数传递-我花了一整天的时间,找不到答案我不认为第一个选项会起作用:让您不得不使用动态SQLIs@searchstring在最后一次尝试中是否遗漏了周围的撇号或引号?将文本写入字符串写出该字符串以查看其是否为错误SQL。。。第三种选择是我认为唯一可行的<代码>执行('插入INTO@TempRankTable从CONTAINSTABLE(“++@table+”、“++@column+”、“++@searchstring+”)中选择*也许可以。我100%确定从没有下划线的屏幕截图中看不到遗漏的撇号或引号。我看到函数中不允许使用EXEC:正确。这是一个范围问题。有几个例子似乎引用了使用CLR。嗯,是的,但仍然不知道如何将其作为参数传递-我花了一整天的时间,找不到答案我不认为第一个选项会起作用:让您不得不使用动态SQL