0

ストアド プロシージャが正しく動作しない理由を特定しようとしています。問題は、連結パラメーターを使用する場合です。完成したら、これらを 6 つまたは 7 つ作成し、それぞれが最後の上に構築されます。=、like、%、スペース、スペースなしを含むすべてのバリエーションを試しましたが、これを機能させるための正しい構文を思いつくことができません。「ハードコードされた」テストも行いましたが、正常に動作するため、データは正しいです。ヘルプ!ありがとう

ここにコードがあります -

ALTER PROCEDURE [dbo].[rspSCLTEST]

(@RRID as varchar(4),
@State as varchar(2),
@Sub as varchar(75))
AS
BEGIN

SET NOCOUNT ON;

DECLARE @SQL as varchar(4000)

SET @SQL = @State

--add the subdivision to the where statement
If @Sub = 'ALL'
SET @SQL = @SQL
ELSE
 SET @SQL += ' AND (C.SubDivision = '+ @Sub + ')'


SELECT C.CRID, C.DOT, C.RR, C.Pref, C.MP, C.Division, C.SubDivision, C.City, C.Street,
    C.State, C.County, C.RestrictedCounty, C.Remarks, C.SpecialInstructions, C.Route, C.ThirdAppRequired,
    C.MainTrks, C.OtherTrks, C.OnSpur, C.MaxSpeed, C.SubContracted, C.FenceEncroachment, C.Lat, C.Long,
    C.PropertyType, C.WarningDevice,C.Surface, C.ROWNE, C.ROWNW, C.ROWSE, C.ROWSW, C.ROWWidth, C.ExtNE,
    C.ExtNW, C.ExtSE, C.ExtSW, C.TempActive, C.PCO, A.App1Date, A.App1Cut, A.App1Spray, A.App1Inspect, 
    A.App2Date, A.App2Cut, A.App2Spray, A.App2Inspect, A.App3Date, A.App3Cut, A.App3Spray, A.App3Inspect

    FROM Crossings AS C LEFT OUTER JOIN AppData AS A ON C.CRID = A.CRID
    WHERE (C.DeletedCrossing = 0) AND (C.RR = @RRID)
    AND C.State = @SQL


END
4

2 に答える 2

2

問題は、動的SQLとパラメーター置換を混同していることです。次のようなものを試してください。

and c.state = @state and (@sub = 'ALL' or c.subdivision = @sub)

あなたがこれを書いた方法で、あなたは以下をチェックしていました:

and c.state = '<state> and c.subdivision = @sub'

つまり、2番目の句は句として解釈されておらず状態の一部として解釈されています。

于 2013-02-14T18:46:42.970 に答える
0

この行:

SET @SQL += ' AND (C.SubDivision = '+ @Sub + ')'

そしてこの行:

AND C.State = @SQL

容疑者のようです。私はあなたのデータについて推測することしかできませんが、あなたは2つの異なるオブジェクトを持っているようです:StateとSub-divisionです。

C.Stateにはどのようなデータがありますか?それは単に州の略語ですか?(または、WA、MO、MN、AZなど)。もしそうなら、あなたは決して肯定的な結果を得ることができませんWHERE C.State = WA123(「123」がサブディビジョン値であると仮定します)。

いずれにせよ、あなたはこのようなことをすることができますか?->

WHERE C.State = @state AND C.Subdivision = @sub
于 2013-02-14T18:56:25.960 に答える