domingo, 14 de setembro de 2008

Erro em cubos do SSAS depois de instalar o Source Safe

Nos deparamos aqui com um problema de não conseguir editar os membros calculados de um cubo depois de instalar o Source Safe. Meu colega Ricardo Ramos conseguiu achar uma solução:

Analysis Services - Error Calculations
Unexpected error ocurred:

This error is caused because an installation of the Office 2007 overwrites two particular files that are used by SSAS 2005:
- msmdlocal.dll
- msmgdsrv.dll
So the solution is to copy this two files from:
%programfiles%\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\
to:
%programfiles%\Common Files\System\Ole DB\

Só jogar esses arquivos na pasta citada e boa!

quinta-feira, 11 de setembro de 2008

Insert into

Um código simples e interessante para inserir somente registros únicos a partir de uma outra tabela de-para que é usada para comparar se o registro já foi inserido:

INSERT INTO TBDPPECA
(ID_PECA, CODFABRICANTE, NUM_MOL, DTPROCESSAMENTO)
(SELECT ID_PECA, NUM_CODFABRICANTE, NUM_MOL,CONVERT(VARCHAR(10), GETDATE(), 120) + ' 00:00:00'
FROM DIMPECA
WHERE ID_PECA >
CASE
WHEN (SELECT MAX(ID_PECA) FROM TBDPPECA) IS NULL THEN 0
ELSE (SELECT MAX(ID_PECA) FROM TBDPPECA)
END
)


Mais um update from:

UPDATE tbprod SET
ind_cestabasica = 'S'
FROM
tbcestabasica cb, tbprod p
where
cb.num_prod = p.num_prod

Lendo caracteres de uma string simulando um split com T-Sql

Este código simula um split, mas para um caso específico que eu enfrentei, onde precisava quebrar uma string em várias, mas sabia que sempre seria preenchida desta forma: '97 98 99 00'. Precisava pegar os dois caracteres quebrando pelo espaço.
Dá pra fazer isso mais dinamicamente, usando CharIndex por exemplo, fica ao gosto do freguês:

/*
Simulando Split
*/

print 'Segunda versão'
declare @stPos int
declare @size int
declare @var varchar(100)
set @var = '97 98 99 00'
set @size = len(@var)
set @stPos = 1
while @size > 0
begin
print substring(@var, @stPos, 2)
set @stPos = @stPos + 3
set @size = @size - 3
end

terça-feira, 9 de setembro de 2008

Usando GetDate() para retornar somente a data


SELECT CAST(CONVERT(VARCHAR(10), GETDATE(), 120) AS SMALLDATETIME)

Melhor que usar concatenação:

select CONVERT(VARCHAR(10), GetDate(), 120) + ' 00:00:00'

Verificando o código para configuração da data.