我有以下SQL功能的SQL表查找功能:要概括执行exec
create function [dbo].[LookUpAnonymiseString](@string varchar(500), @tableSize int)
returns varchar(500)
as
begin
DECLARE @output varchar(500)
SELECT @output = Value FROM AnonymisationLookup.dbo.Forename WHERE AnonymisationLookup.dbo.Forename.ID = ABS(CHECKSUM(@string)) % @tableSize
return @output
end
go
我相信这个功能能正常工作,它需要一个输入字符串和INT代表查找表的大小(包含所有可用字符串)。然后,我将输入字符串散列到索引中以查找表,并将该索引处的值返回给输出字符串。
我想概括一下这个函数,这样表名可以传入并用在查询中,而不是硬编码的“Forename”表。
我试过以下,但SQL抱怨并说:“只有函数和一些扩展存储过程可以从一个函数内执行。”
create function [dbo].[LookUpAnonymiseString](@string varchar(500), @tableName varchar(128), @tableSize int)
returns varchar(500)
as
begin
declare @output varchar(500)
declare @sql nvarchar(max)
set @sql = N'select @output = Value from AnonymisationLookup.dbo.'+quotename(@tableName)+' where AnonymisationLookup.dbo.'+quotename(@tableName)+'.ID = abs(checksum(@string)) % @tableSize'
exec sp_executesql @sql, N'@output nvarchar(max) out', @output out
return @output
end
go
您不能从函数执行存储过程。用存储过程替换函数可能是解决方案。 – Peter
谢谢彼得。可能会调查这些 – dahui