我需要将当前保存为列的tinyint
值的数据按照不同列的顺序插入到单个binary(n)
值中。 (我猜想有点模仿一个字节数组。)
如果这是将字符串连接成一个更大的字符串,我会这样做:
declare @string table (str varchar(100), ord int)
insert into @string
select 'A', 1
union all
select 'B', 3
union all
select 'C', 2
declare @strings varchar(1000)
set @strings = ''
select @strings = @strings + str
from @string
order by ord
select @string --would return ACB
这显然不是binary
数据类型的正确方法(没有空变量选项可用,加法不能以binary
的方式工作),但有没有类似的方式这样做?
答案 0 :(得分:2)
只要我的假设是正确的
,这应该有效tinyint
在最终结果中都是一个字节。ord
值都存在于1 - 某个最大值,没有间隙。下面:
declare @t table (s tinyint not null,ord int not null)
insert into @t(s,ord) values (12,1),(1,2),(255,3)
;With Cat as (
select CONVERT(varbinary(max),s) as run,ord
from @t where ord = 1
union all
select run + CONVERT(varbinary(1),s),t.ord
from Cat c inner join @t t on c.ord = t.ord - 1
)
select run from Cat where ord = (select MAX(ord) from @t)
option (maxrecursion 0)
结果:
0x0C01FF
答案 1 :(得分:0)
使用FOR XML PATH
:
select c, convert(varbinary, c)
from (
select str as [text()]
from @string
order by ord
for xml path('')
) x(c)