0

私はそのような sproc を持っています。基本的に、フィールドがまだ存在しない場合は、プレフィックスをフィールドに追加します。

ALTER PROCEDURE [dbo].[AgSp_UpdateAgTbl_Licensing ](@newPrefix nvarchar, @systemName nvarchar)

AS
BEGIN
       -- SET NOCOUNT ON added to prevent extra result sets from
       -- interfering with SELECT statements.
       SET NOCOUNT ON;

update AgTbl_Licensing
set   UrlPrefixes =
           case
               when UrlPrefixes is null or UrlPrefixes = ''
               then @newPrefix
               else convert ( nvarchar( max ), UrlPrefixes) + ', '+@newPrefix
            end
where SystemName = @systemName and (UrlPrefixes not like ('%'+@newPrefix+'%') or UrlPrefixes is null)

END

私はこれを次のように呼び出します:

Execute AgSp_UpdateAgTbl_Licensing 'eb_', 'EB1';

しかし、更新はデータベースに対して行われていません - どうしてですか? システム管理者がいないのでデバッグできません

4

2 に答える 2

1

(単一の列に複数の値を格納することは、ほとんどの場合、それらをテーブルの行として適切に格納するよりも悪いことを無視します)

プロシージャに 2 つのパラメータを宣言しましたが、どちらも長さ 1 です。試してください:

ALTER PROCEDURE [dbo].[AgTbl_Licensing](@newPrefix nvarchar(100), @systemName nvarchar(100))

nchar および nvarcharから:

n がデータ定義ステートメントまたは変数宣言ステートメントで指定されていない場合、デフォルトの長さは 1 です。CAST 関数で n が指定されていない場合、デフォルトの長さは 30 です。

于 2013-01-31T11:46:20.723 に答える
1

長さのプロシージャパラメーターを次のように宣言する必要があると思います。

@newPrefix nvarchar(50), @systemName nvarchar(50)

そうしないFIRST characterと、文字列のみが必要になるWHERE clause failsため、更新するレコードを見つける必要があります。また、パラメータは期待どおりではありません。

于 2013-01-31T11:45:34.817 に答える