1

私はテーブルを持っています。私には2つの変数があり、1つは、、もう1つはbitですint

テーブル:WorkGroupCollectionDetail

変数:@WorkgroupID int, @IsFSBP bit

テーブルにはとがWorkGroupId int PKありWorkGroupCollectionCode varchar PKます。それでおしまい。

次のようなクエリを実行できます。

SELECT WorkGroupId 
FROM WorkGroupCollectionDetail 
WHERE WorkGroupCollectionCode = 'FSBP'

そしてそれは私にのリストを与えますWorkGroupID

したがって、の値が@WorkgroupIDそのクエリの結果内にある場合は、ビット変数をtrueに設定する必要があります。

4

3 に答える 3

2
select @IsFBSP = case
  when exists (
    select 42 from WorkGroupDetailCollection
      where WorkGroupCollectionCode = 'FSBP' and WorkGroupId = @WorkGroupId ) then 1
  else 0 end

これは論理的に次と同等です:

select @IsFBSP = case
  when @WorkGroupId in (
    select WorkGroupId from WorkGroupDetailCollection
      where WorkGroupCollectionCode = 'FSBP' ) then 1
  else 0 end

を使用しEXISTSたクエリは、を使用したクエリよりもパフォーマンスが優れていることがよくありますIN。実行プランをチェックして、特定のケースでそれらがどのように比較されるかを確認できます。

これらの例には、ビット値を1だけでなく0に設定することも含まれていることに注意してください。

于 2012-10-02T21:15:14.433 に答える
1

を変更しSELECTて、のチェックを含め、それに応じWorkGroupIdて更新することができます。@IsFSBP

IF EXISTS(SELECT WorkGroupId 
          FROM WorkGroupCollectionDetail 
          WHERE WorkGroupCollectionCode = 'FSBP'
             AND WorkGroupId = @WorkgroupID)
BEGIN
   SELECT @IsFSBP = 1;
END

SQLフィドルの例

于 2012-10-03T02:17:27.980 に答える
0

私はあなたが探していると思います

Set @BitVariable = count(*)
From TestTable 
WHERE TestCode = 'TestValue' and TestID = @TestID 
于 2012-10-02T21:19:13.703 に答える