0

という変数を使用するストアド プロシージャがあります@Command (nvarchar(MAX))。次に、与えられた入力に基づいて、それに応じてパラメーターを追加します。

declare @Command nvarchar(max)
if(@CaseFileID IS NOT NULL)
BEGIN
select @Command='
  select [ServerCredentialsID],[CaseFileID],EIKSLT.[LocationType],EPT.PaymentType,[TaskID],[DateActive]
      ,[LengthOfPurchase],[Username],[Password],[IPDomain],[Port],[DES],[Website],[AmountPaid],[Latitude]
      ,[Longitude],[HasAttachments],[TimeStamp],[CaseElement],[Temporary],[StatusID] 
      FROM Element17a_IKSServerCredentials EIKSSC 
      JOIN ElementsIKSLocationTypes EIKSLT ON EIKSSC.LocationBeingUsedID= EIKSLT.IKSLocationBeingUsedID 
      JOIN ElementsPaymentTypes EPT ON EIKSSC.PaymentMethodID=EPT.PaymentTypeID 
      where  EIKSSC.CaseFileID='''+cast(@CaseFileID as nvarchar(MAX))+''' '

@CaseFileID は int として宣言されており、表では int です。やってみると

where  EIKSSC.CaseFileID = ' + @CaseFileID + ' '

その後、値は表示されません(エラーでは次のようになります"EIKSSC.CaseFileID= '"

私はそれを理解していません。

注: SQL Server 2008 Management Studio

4

1 に答える 1

1

@CaseFileID は、表示していなくても VARCHAR であるためです。
あなたのIFはず

if(@CaseFileID > '')

それでもうまくいかない場合は、LEFT 結合に交換する必要があります。これは、INNER JOIN が他の 2 つのテーブルで一致しないレコードを削除するためです。

最後に、CaseFileID は int であるため、引用符は必要ありません。WHERESQL Server は、句内で暗黙的に '9' を整数 9 にキャストしますが、これは必須ではありません。

declare @Command nvarchar(max)
if(@CaseFileID > '')
BEGIN
select @Command='
  select [ServerCredentialsID],[CaseFileID],EIKSLT.[LocationType],EPT.PaymentType,[TaskID],[DateActive]
      ,[LengthOfPurchase],[Username],[Password],[IPDomain],[Port],[DES],[Website],[AmountPaid],[Latitude]
      ,[Longitude],[HasAttachments],[TimeStamp],[CaseElement],[Temporary],[StatusID] 
      FROM Element17a_IKSServerCredentials EIKSSC 
      LEFT JOIN ElementsIKSLocationTypes EIKSLT ON EIKSSC.LocationBeingUsedID= EIKSLT.IKSLocationBeingUsedID 
      LEFT JOIN ElementsPaymentTypes EPT ON EIKSSC.PaymentMethodID=EPT.PaymentTypeID 
      where  EIKSSC.CaseFileID='+cast(@CaseFileID as nvarchar(MAX))
于 2012-12-14T21:16:51.933 に答える