ユーザーがソフトウェア製品の管理画面でカンマ区切りの検索タグを記述できるように作成したストアド プロシージャがあります。そのため、カンマ区切りのタグを追加できます。編集したい場合は、テーブルからすべてのタグを読み取り、ストアド プロシージャでカンマ区切りの値 (CSV) として再作成し、それを呼び出し元のコードに返します。最近何が起こったのか、ユーザーは、自分が書いた新しい CSV が表示されないと不満を漏らしました。調べたところ、データベースから値を読み取って CSV 文字列を作成するときに、ストアド プロシージャが文字列を切り捨てていることがわかりました。文字列は nvarchar 型で、最大文字数制限の 4000 文字を超えているため、値が切り捨てられます。その問題を解決する方法についてのアイデア。
下に私のコードを見つけてください。
BEGIN
BEGIN
Declare @Synonyms Table
(
RowID int Identity(1,1),
SynonymID int,
[Synonym] nvarchar(4000)
);
SET NOCOUNT ON;
Insert @Synonyms(SynonymID, [Synonym])
Select distinct SynonymID, [Synonym] From RF_SearchSynonyms with(nolock) Where SearchTermID = @SearchTermID And ActiveInd = 1
If((Select COUNT(RowID) From @Synonyms) <> 0)
BEGIN
Declare @CurrentRow int = (Select MIN(RowID) From @Synonyms),
@TotalRows int = (Select MAX(RowID) From @Synonyms),
@Synonyms_CSV nvarchar(4000) = '';
WHILE @CurrentRow <= @TotalRows
BEGIN
Declare @TempSyn nvarchar(500);
Select @TempSyn = [Synonym] + ',' From @Synonyms Where RowID = @CurrentRow;
Set @Synonyms_CSV = @Synonyms_CSV + LTRIM(RTRIM(LOWER(@TempSyn)));
SET @CurrentRow = @CurrentRow + 1
END
END
Else
BEGIN
Set @Synonyms_CSV = '';
END
END
BEGIN
Declare @SKUs Table
(
RowID int Identity(1,1),
SkuID int,
SKU nvarchar(15)
);
SET NOCOUNT ON;
Insert @SKUs(SkuID, SKU)
Select distinct SkuID, SKU From RF_SearchSkus with(nolock) Where SearchTermID = @SearchTermID And ActiveInd = 1
If((Select COUNT(RowID) From @SKUs) <> 0)
BEGIN
Declare @CurrentRow1 int = (Select MIN(RowID) From @SKUs),
@TotalRows1 int = (Select MAX(RowID) From @SKUs),
@Skus_CSV nvarchar(4000) = '';
WHILE @CurrentRow1 <= @TotalRows1
BEGIN
Declare @TempSku nvarchar(15);
Select @TempSku = SKU + ',' From @SKUs Where RowID = @CurrentRow1;
Set @Skus_CSV = @Skus_CSV + LTRIM(RTRIM(@TempSku));
SET @CurrentRow1 = @CurrentRow1 + 1
END
END
Else
BEGIN
Set @Skus_CSV = '';
END
END
BEGIN
Declare @Combined varchar(8000),
@syn_len int = 0,
@sku_len int = 0;
Select @syn_len = LEN(@Synonyms_CSV);
Select @sku_len = LEN(@Skus_CSV);
Select @Combined = @Synonyms_CSV + '-_-' + @Skus_CSV;
Select @Synonyms_CSV + '-_-' + @Skus_CSV;
END
終わり
text と ntext は、連結操作ではうまく機能しないため、使用できません。
ありがとう。