1
スカラー値関数を使用して、システムのユーザーがプロファイルに画像、オーディオファイルまたはビデオを持っているかどうかを調べています。T-SQLの簡単な数式
メンバーを検索するときに、メンバーのメディア数で注文したいと思っています。たとえば、すべてのメディア(ビデオ、オーディオ、画像)を持っているユーザは、それぞれのメディアに対して3、1ポイントを得ることができます。彼らは2つのメディア(画像とビデオ)を持っているが、オーディオがない場合、彼らは2を得るだろう。これは、3つのメディアすべてを持っているすべてのユーザーの後に表示されます。
ストアドプロシージャがこれを持っている:
SELECT
a.MemberID,
a.UserName,
a.LastLogin,
a.City,
b.Abbr,
c.Country,
a.AvatarMed,
a.Gender,
sbuser.sf_MemberHasImages(a.MemberID),
sbuser.sf_MemberHasVideo(a.MemberID),
sbuser.sf_MemberHasAudio(a.MemberID),
d.Domain,
sbuser.sf_DisplayName(a.MemberID),
a.CreateDate,
a.Claimed,
a.ProfileTypeID,
a.Zip,
a.PhoneNbr,
a.PrPhone
FROM Member a
LEFT JOIN State b ON b.StateID = a.StateID
INNER JOIN Country c ON c.countryID = a.CountryID
INNER JOIN Region d ON d.RegionID = a.MemberREgionID
WHERE ProfileTypeID IS NOT NULL
AND (sbuser.sf_DisplayName(a.MemberID) LIKE @UserName + '%')
AND a.MemberID <> @MemberID
ORDER BY a.Claimed DESC, a.AvatarTiny DESC, sbuser.sf_MemberHasMedia(a.MemberID)
あなたが順に注意している場合、それは次のものが含まれます。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [sbuser].[sf_MemberHasMedia](@MemberID bigint)
RETURNS BIT
AS
BEGIN
DECLARE @OUTSTR INT
DECLARE @OUT1 BIT
DECLARE @OUT2 BIT
DECLARE @OUT3 BIT
SET @OUT1 = (SELECT CAST(COUNT(MemberAudioID) AS BIT) FROM MemberAudio
WHERE MemberID @MemberID)
RETURN @OUTSTR = @OUT1
END
RETURNS BIT
AS
BEGIN
SET @OUT2 = (SELECT CAST(COUNT(a.MemberImgID) AS BIT)
From MemberImg a
INNER JOIN MemberImgGallery b ON b.MemberImgGalleryID=a.MemberImgGalleryID
WHERE b.MemberID = @MemberID)
RETURN @OUTSTR = @OUTSTR + @OUT2
END
RETURNS BIT
AS
BEGIN
SET @OUT3 = (SELECT CAST(COUNT(MemberVideoID) AS BIT) FROM MemberVideo
WHERE MemberID = @MemberID)
RETURN @OUTSTR = @OUTSTR + @OUT3
END
Iをこのロジックでは失われています、そして、それは簡単なはず。どんな助けでも大歓迎です。
多くのおかげで、 ポール
次のエラーを取得:メッセージ8117、レベル16、状態1、プロシージャsf_MemberHasMedia、ライン25 オペランドのデータ型のビットは、追加の演算子には無効です。 – neojakey
@ OUT1、@ OUT2および@ OUT3のデータ型もINTに変更する必要があります。私は答えを編集します。 –
これまでのところとても良い.. @OUTSTRにはデフォルトの0をどうやって与えるのですか? – neojakey