1

我有一张桌子。我有 2 个变量,一个是 a bit,另一个是 a int

桌子:WorkGroupCollectionDetail

变量:@WorkgroupID int, @IsFSBP bit

该表有WorkGroupId int PKWorkGroupCollectionCode varchar PK。而已。

我可以运行这样的查询:

SELECT WorkGroupId 
FROM WorkGroupCollectionDetail 
WHERE WorkGroupCollectionCode = 'FSBP'

它给了我一个列表WorkGroupID

所以我需要做的是,如果 的值@WorkgroupID在该查询的结果中,我需要将 bit 变量设置为 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。您可以检查执行计划以查看它们在您的特定情况下的比较情况。

请注意,这些示例包括将位值设置为零和一。

于 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 回答