我有以下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