我有一个存储用户信息的表。该表中有一个用户 ID(身份)列。表数据由一个视图查询,该视图被许多存储过程引用,但我们引用了一个名为 auid 的东西,它由下面的 UDF 创建。UDF 在视图中被调用,sprocs 然后根据 auid 从视图中加入或查询。看起来这个例程被调用了很多次(数千次)并且在我们的 SQL Server 上造成了一些不必要的负载。有没有更好的方法来获取 user_id = 255 并将其转换为 varchar = 000000255 (9 个字符长)?
UDF 语法:
ALTER FUNCTION [dbo].[udf_AUID] (@user_id int)
RETURNS char(9)
with schemabinding
AS
BEGIN
DECLARE @user_id_string varchar(9)
DECLARE @rval char(9)
SELECT @user_id_string=CAST(@user_id as varchar(9))
SELECT @rval=LEFT('000000000',9-len(@user_id_string))+@user_id_string
RETURN @rval
END
视图的基本语法是:
ALTER VIEW [dbo].[v_users]
AS
SELECT
dbo.udf_AUID(dbo.users.user_id) AS auid,
user_id,
dbo.users.username
FROM dbo.users
存储过程中的示例调用如下所示:
DECLARE @auid CHAR(9)
SET @auid = '000002444' --normally passed in, but set here for example
SELECT dealer_range FROM users WHERE auid = @auid
DECLARE @cat_access TINYINT, @mit_access TINYINT
SELECT @cat_access = chan_access & 1, @mit_access = chan_access & 2
FROM appian.dbo.v_users
WHERE auid = @auid
提前致谢!