ユーザー情報を格納するテーブルがあります。テーブルには userid (identity) 列があります。テーブル データは、多くの sproc によって参照されるビューによってクエリされますが、以下の UDF によって作成される auid と呼ばれるものを参照します。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
sproc での呼び出しの例は次のようになります。
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
前もって感謝します!