1

これが私の状況です。簡単な答えがあるに違いないことはわかっていますが、その方法を知るには TSQL に精通していません。以下に、必要なデータを選択するストアド プロシージャのメイン クエリを示します。これまでのところ、GetRecordMediaById という別のストアド プロシージャを呼び出す必要があることを除いて、PhotoId 列から Id をフィードし、適切なデータベースから BLOB データを選択する必要があることを除いて、動作しています。元の PhotoId 列を照会または置換します。

どうすればいいのかわかりません。一時テーブルを実装しようとしましたが、実行することさえできませんでした。

これが私のコードです:

ALTER PROCEDURE [dbo].[GetRollCallData] 
@Ids        VARCHAR(255),
@LexiconId  INT,
@UUID       UNIQUEIDENTIFIER,
@ReadOnly   INT
AS


DECLARE @TableCode INT
SET @TableCode = 58
EXEC InsertInSelectionCache @Ids, @UUID, @TableCode, 0
WITH DOACTE AS(
SELECT ROW_NUMBER() OVER(PARTITION BY [File].Id ORDER BY CustomRecordsetId DESC) AS RowNumber, [File].*, FileType2Lexicon.Label as FileTypeLabel, [People].DefaultPhone, [People].InvertedName, CustomFieldValue.Value as DateofArrest
    FROM FileType2Lexicon, SelectionCache, [People], [File]
    INNER JOIN [CustomRecordSet]
    ON [CustomRecordset].RecordId = [File].Id
    INNER JOIN CustomFieldValue
    ON  [CustomRecordset].Id = CustomFieldValue.CustomRecordsetId
    INNER JOIN [CustomField2Lexicon]
    ON CustomField2Lexicon.CustomFieldId = CustomFieldValue.CustomFieldId
    WHERE   [File].Id = SelectionCache.RecordId
    AND SelectionCache.UUID = @UUID
    AND SelectionCache.TableCode = @TableCode -- this is the code for File table  
    AND     [File].Id <> 0 
    AND     [File].FileTypeId = FileType2Lexicon.FileTypeId 
    AND     FileType2Lexicon.LexiconId = @LexiconId
    AND     [File].ClientIdString = [People].ClientIdString
    AND     CustomFieldValue.Value <> ''
    AND     CustomField2Lexicon.Label = 'Date of Arrest'),


PHOTOCTE AS(
SELECT  [File].Id, CustomFieldValue.Value as PhotoId
    FROM FileType2Lexicon, SelectionCache, [People], [File]
    INNER JOIN [CustomRecordSet]
    ON [CustomRecordset].RecordId = [File].Id
    INNER JOIN CustomFieldValue
    ON  [CustomRecordset].Id = CustomFieldValue.CustomRecordsetId
    INNER JOIN [CustomField2Lexicon]
    ON CustomField2Lexicon.CustomFieldId = CustomFieldValue.CustomFieldId
    WHERE   [File].Id = SelectionCache.RecordId
    AND SelectionCache.UUID = @UUID
    AND SelectionCache.TableCode = @TableCode -- this is the code for File table  
    AND     [File].Id <> 0 
    AND     [File].FileTypeId = FileType2Lexicon.FileTypeId 
    AND     FileType2Lexicon.LexiconId = @LexiconId
    AND     [File].ClientIdString = [People].ClientIdString
    AND     CustomFieldValue.Value <> ''
    AND     CustomField2Lexicon.Label = 'Booking Photo')

SELECT DOACTE.*, PHOTOCTE.PhotoId
FROM DOACTE
INNER JOIN 
PHOTOCTE
ON DOACTE.Id = PHOTOCTE.Id
WHERE DOACTE.RowNumber = 1

編集:

私にとっての解決策は、BLOB データベースの Id を解決して BLOB データを返すスカラー関数を作成することでした。

SELECT DOACTE.*, dbo.GetImagebyId(PHOTOCTE.PhotoId) as Photo,
            FROM DOACTE
            INNER JOIN 
            PHOTOCTE
            ON DOACTE.Id = PhotoCTE.Id
            WHERE DOACTE.RowNumber = 1
4

1 に答える 1