2

次のような単一のストアド プロシージャを作成しました。

create proc sp_test
  (@name nvarchar(100))
as
begin
    select * from company
    where company.companyname like '%'+@name+'%'
end
go

次に、ストアド プロシージャをテストします。会社名には Bob's Warehouse のように一重引用符が含まれている場合があるため、この名前をパラメーターとして使用して、DEV、SIT、UAT などのさまざまな環境でストアド プロシージャを実行します。一重引用符を 2 つの一重引用符に置き換えます。DEV では結果が得られますが、UAT では得られないことがわかりました。どうしてか分かりません。

exec sp_test 'Bob''s Warehouse'

これは、異なる環境でのデータベース設定に関するものですか? ある環境ではまったく同じコードが機能するのに、別の環境では機能しないのはなぜですか?

前もって感謝します。

4

1 に答える 1

0

一重引用符が原因である場合は、ある環境で別の環境で作業するのは意味がありません。異なる環境で同じデータをバックアップおよび復元してみてください。これはおそらくダーティ データが原因です。[Bob's Warehouse] のような特定のレコードが別の環境で機能しない場合は、表示される単一引用符が本当に char(39) であるかどうかを確認してください。別の環境で [exec sp_test 'Bob' + char(39) + 's Warehouse' ] を実行して、動作するかどうかを確認することもできます。

于 2013-03-08T19:42:02.343 に答える