查询TSQL中的@bitmap二进制文件(1)?

查询TSQL中的@bitmap二进制文件(1)?,tsql,Tsql,在TSQL中的一个存储过程中,我遇到了代码 Alter procedure Name @parameter1 , @parameter2 , .......... if (substring(@bitmap,1,1) & 1 = 1) or //what does this mean? (substring(@bitmap,1,1) & 2 = 2) or (substring(@bitmap,1,1) & 4 = 4) or (substring(@bitm

在TSQL中的一个存储过程中,我遇到了代码

Alter procedure Name
@parameter1 ,
@parameter2 ,
..........


if (substring(@bitmap,1,1) & 1 = 1) or  //what does this mean?
 (substring(@bitmap,1,1) & 2 = 2) or
 (substring(@bitmap,1,1) & 4 = 4) or
 (substring(@bitmap,1,1) & 128 = 128) or
 (substring(@bitmap,2,1) & 1 = 1)

[Column1] = case substring(@bitmap,1,1) & 1 when 1 then @parameter1 else [Column1] end,
[Column2] = case substring(@bitmap,1,1) & 2 when 2 then @parameter2 else [Column2] end,
[Column3] = case substring(@bitmap,1,1) & 4 when 4 then @parameter3 else [Column3] end,
[Column4] = case substring(@bitmap,1,1) & 8 when 8 then @parameter4 else [Column4] end,
[Column5] = case substring(@bitmap,1,1) & 16 when 16 then @parameter5 else [Column5] end,
[Column6] = case substring(@bitmap,1,1) & 32 when 32 then @parameter6 else [Column6] end,
[Column7] = case substring(@bitmap,1,1) & 64 when 64 then @parameter7 else [Column7]end,
[Column8] = case substring(@bitmap,1,1) & 128 when 128 then @parameter8 else [Column8] end,
[Column9] = case substring(@bitmap,2,1) & 1 when 1 then @parameter9 else [Column9] end,
[Column10] = case substring(@bitmap,2,1) & 2 when 2 then @parameter10 else [Column10] end
通过谷歌搜索,我发现它有助于动态构建过程。但我仍然没有什么疑问

(substring(@bitmap,1,1) & 1 = 1) or  //what does this mean?
substring(@bitmap,2,1) & 1 when 1 then @parameter9 else [Column9] end,//what does this mean

case SUBSTRING(@bitmap,1,1) & 256 when 256 or
case SUBSTRING(@bitmap,1,1) & 512 when 512 

谢谢。

@bitmap是一个位掩码,它定义了使用@parameterN值中的哪一个来覆盖ColumnN值的(现有?)值

表达式
(value&x)when x
检查是否在@bitmap中为x设置了2的幂


表达式
CASE expression WHEN value THEN x ELSE y END
相当于IF ELSE语句(或IF/switch in C#等)。

x可以具有的最大值是多少,是128还是可以使用254512。(@bitmap,1,1)和(@bitmap,2,1)之间的区别是什么。(子字符串(@bitmap,1,1)&1=1)这是否意味着第1个参数等等,只是为了完整性:
(value&x),当x
检查
x
中设置的所有位也设置在
value
中时。OP的问题恰好使用了2的幂,但这不是一个要求。我混淆了if substring(@bitmap,1,1)&128=128和if substring(@bitmap,2,1)&128=128,最高值是128(位7),因此必须使用substring(@bitmap,2,1)等来处理8个以上的参数,那正是我想要的