お疲れ様です。 TimberLandChapel です。
宣言の方法ではなく,ストアドプロシージャ内での変数の利用方法を誤解されているようです。
確かに,より複雑なクエリを動的に編成するためには,
@query nvarchar や @strSQL varchar などの変数に構築済みのクエリを格納してEXECする
という今回使われた方法をとることはあります。
しかし,この方法は,選択してくる列を動的に構成するとか,対象テーブルを切り替えるなどのより複雑な案件の場合です。
WHERE 句に使うような一般的なパラメータは,ストアドの入力パラメータとして宣言した時点で,内部で利用できるものになります。
具体的には,
CREATE PROCEDURE [dbo].[sp_quantmodify]
(
@paramPN varchar(20),
@paramQUANT int
)
AS
DECLARE @strSQL nvarchar(1000)
SELECT * FROM dbo.a_test
UPDATE dbo.a_test
SET QUANT=@paramQUANT
WHERE PN=@paramPN ;
SELECT * FROM dbo.a_test
GO
とするだけで,おそらく意図されていることはできます。(実際の要件はわかりませんが)
いかがでしょう?