Bom dia.
Caro colega, bom se eu entendi bem o sua necessidade, eu acho que isso te atende:
Tabela de exemplo:
--Criação da tabela de exemplo
CREATE TABLE tblCaminho
(
codigoID int IDENTITY(1,1) NOT NULL,
caminho varchar(250) NOT NULL,
ColocarTraco varchar(20) NULL
)
Inserindo alguns valores
--Inserindo alguns valores
INSERT INTO tblCaminho values ('c:\', '12345678')
INSERT INTO tblCaminho values ('d:\', '90876564')
INSERT INTO tblCaminho values ('f:\', '32456340')
INSERT INTO tblCaminho values ('w:\', '8u76r432')
INSERT INTO tblCaminho values ('k:\', '67340942')
INSERT INTO tblCaminho values ('c:\', 'l0h6g4d6')
Criando um cursor para inserir traços de dois em dois caractere do campo de exmplo:
--Código completo do cursor
DECLARE @um varchar(3)
DECLARE @doi varchar(3)
DECLARE @tre varchar(3)
DECLARE @qua varchar(3)
DECLARE @coloca varchar(20)
DECLARE @temp varchar(20)
DECLARE cursorColca cursor for
select ColocarTraco from tblCaminho
open cursorColca
fetch next from cursorColca into @coloca
while @@FETCH_STATUS = 0
begin
set @temp = @coloca
set @um = SUBSTRING(@temp, 1, 2)
set @doi = SUBSTRING(@temp, 3, 2)
set @tre = SUBSTRING(@temp, 5, 2)
set @qua = SUBSTRING(@temp, 7, 2)
update tblCaminho
set ColocarTraco = (@um +'-'+ @doi +'-'+ @tre +'-'+ @qua)
where ColocarTraco = @coloca
fetch next from cursorColca into @coloca
end
close cursorColca
deallocate cursorColca
Arquivo com comentários:
--VARIÁVEIS PARA PARTICIONAR O NUMERO
DECLARE @um varchar(3)
DECLARE @doi varchar(3)
DECLARE @tre varchar(3)
DECLARE @qua varchar(3)
--VARIÁVEL QUE VAI RECEBER O RSULTADO DO CURSOR
DECLARE @coloca varchar(20)
--VARIÁVEL A SER PARTICIONADA
DECLARE @temp varchar(20)
--DECLARAÇÃO DO CURSOR EFETIVA
DECLARE cursorColca cursor for
--ESSE SELECTE PEGA APENAS O CAMPO ONDE VAMOS COLOCAR OS TRAÇOS
select
ColocarTraco
from
tblCaminho --essa é uma tabela que criei como exemplo
--ABRINDO O CURSOR
open cursorColca
/*BUSCANDO A PRÓXIMA LINHA NO CURSOR E INSERINDO NA VARIÁVEL
DEFINIDA PARA ESSA FINALIDADE*/
fetch next from cursorColca into @coloca
--VERIFICA O STATUS DA BUSCA, CASO ESSE STATUS SEJA DIFERENTE DE 0,
--O LOOP PARA SIGNIFICANDO QUE O CURSOR CHEGOU NA ULTIMA LINHA DE SUA TABELA
while @@FETCH_STATUS = 0
begin
--USANDO A VARIÁVEL TEMPORÁRIA PARA REALIZAR A QUEBRA DO CAMPO
--QUE PRECISAMOS INSERIR OS "TRAÇOS"
set @temp = @coloca
--SEPARANDO OS PONTOS ESPECÍFICOS ONDE QUEREMOS COLOCAR OS TRAÇOS
set @um = SUBSTRING(@temp, 1, 2)
set @doi = SUBSTRING(@temp, 3, 2)
set @tre = SUBSTRING(@temp, 5, 2)
set @qua = SUBSTRING(@temp, 7, 2)
--FAZENDO UPDATE DO CAMPO ATUAL
update tblCaminho
-- ESSA LINHA CONCATENA AS VARIÁVEIS COM OS TRAÇOS E INSERE NO CAMPO DA TABELA
set ColocarTraco = (@um +'-'+ @doi +'-'+ @tre +'-'+ @qua)
--A CONDIÇÃO É QUE O CAMPO DA TABELA DEVE SER IGUAL AO DA VARIÁVEL
where ColocarTraco = @coloca
/*BUSCA A PRÓXIMA LINHA NO CURSOR E INSERINDO NA VARIÁVEL
DEFINIDA PARA ESSA FINALIDADE NOVAMENTE E VOLTA PARA O INICIO DO LOOP,
CASO NÃO ENCONTRE O STATUS DO FETCH SAI DE 0 PARA -1 E FINALIZA O LOOP*/
fetch next from cursorColca into @coloca
end
--FECHA O CUROSOR
close cursorColca
--RETIRA OS DADOS DO CURSOR DA MEMORIA OU UMA ESPECIE DE ROLLBACK
deallocate cursorColca
Esse cursor pode ser melhorado, dá uma pesquisada na internet sobre cursor para implementar esse script.
Obs. Faça o teste em ambiente de backup, algo assim antes de colocar em produção
Espero ter ajudado.