quinta-feira, 21 de março de 2024

Olá amigos!

Hoje falarei brevemente sobre um assunto bem interessante no SQL Server que são as views de sistema com informações de schema do banco de dados.

O que são views de sistema?
O Sql Server disponibiliza uma série de views para auxílio na localização de schema de tabelas, views, procedures, entre outras necessidades, facilitando em muito a localização e também a utilização dessas informações

Para quê servem?
Digamos que seja necessário saber em qual tabela temos uma coluna contendo a string “name” em seu nome. Uma forma de resolver isto seria usando a view sysobjects e a view syscolumns, conforme exemplo abaixo:

1
2
3
4
SELECT * FROM SYSOBJECTS OBJ
INNER JOIN SYSCOLUMNS COL
ON OBJ.ID = COL.ID
WHERE COL.NAME LIKE '%NAME%'

Ótimo, isso funciona perfeitamente, porém existe uma forma mais fácil de fazer isto, usando as views de sistema. Em vez de usar isto, use isto:

1
2
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%name%'

A vantagem mais notável é a sintaxe simplificada ao mesmo tempo uma gama maior de informações retornadas sem necessidade de fazer outros joins com outras views, como é necessário fazer quando usamos as views como sysobjects, syscolumns, etc. Sempre que forem utilizar estas views, é preciso usar o nome qualificado INFORMATION_SCHEMA.nome_da_view.

Abaixo uma lista das principais views do INFORMATION_SCHEMA e seus objetivos:

NomeDescrição
CHECK_CONSTRAINTSInformações sobre as constraints das tabelas
REFERENTIAL_CONSTRAINTSRetorna uma linha para cada FOREIGN KEY no banco selecionado
ROUTINESTodas as funções definidas pelo usuário e stored procedures
COLUMN_PRIVILEGESColunas com previlégios garantidos para ou pelo usuário atual
ROUTINE_COLUMNSInformações sobre as colunas usadas nas procedures e functions
COLUMNSInformações sobre todas as colunas
SCHEMATAInformações sobre os bancos de dados
CONSTRAINT_COLUMN_USAGEColunas usadas nas constraints
TABLE_CONSTRAINTSTodas as restrições das tabelas
CONSTRAINT_TABLE_USAGETabelas que possuem uma restrição definida
TABLE_PRIVILEGESTabelas com previlégio garantido para ou pelo usuário atual
TABLESInformações sobre as tabelas
DOMAINSTodos os tipos de dados definidos pelo usuário
VIEW_COLUMN_USAGEInformações sobre colunas utilizadas nas views
KEY_COLUMN_USAGEColunas restringidas como uma chave
VIEW_TABLE_USAGETabelas usadas em uma View
PARAMETERSTodos os parametros para funções definidas pelo usuário e stored procedures
VIEWSInformações sobre as Views

Por hora é isso, façam seus selects e avaliem a necessidade e utilização de cada uma das views citadas.

Referência: http://msdn.microsoft.com/en-us/library/ms186778.aspx


quinta-feira, 16 de abril de 2015

OFF - Música de boa qualidade!

Opa, tudo bem com vocês?

Estou de volta com projeto de retomar de vez as postagens, e me permito começar com uma postagem nada a ver com tecnologia...
Sou músico nas horas vagas, atividade que me permite "desestressar" e esvaziar um pouco das rotinas diárias e, atualmente, toco bateria em um grupo chamado Quinteto Hope.

Dêem uma olhada em nossos canais:
Site : www.hope5.com.br
Instagram: https://instagram.com/hopemusica

Grande abraço a todos e Deus os abençoe!

quarta-feira, 28 de janeiro de 2015

Google Cardboard é usado pela primeira vez por uma...

O blog do Google Brasil: Google Cardboard é usado pela primeira vez por uma...: Um pedaço de papelão dobrável, duas lentes, um microchip, um ímã, um elástico e duas fitas de velcro. Nisso consiste o Google Cardboar...



Algo extremamente interessante e criativo, mostrando que nem tudo em tecnologia precisa ser, necessariamente, dispendioso, não?



#3D #Google #Cardboard

quarta-feira, 20 de abril de 2011

sexta-feira, 17 de setembro de 2010

Novo Blog!

Galera,

Estou fazendo parte de um blog de Tecnologia recém saído do forno, o Olho no bit.
A idéia é trazer informações sobre pequenos problemas do dia-a-dia, aquelas questões simples de solução rápida que, muitas vezes, nos tiram do sério!

Acessem e acompanhem:
http://olhonobit.wordpress.com/

[]'s !

terça-feira, 31 de agosto de 2010

Zerando valor da coluna Identity

Post simples mas útil.
Se Você estiver usando uma coluna definida como "Identity" em uma tabela SQL Server, você pode definir qual o próximo valor a ser inserido nesta coluna. Por exemplo, definir que o número da sua coluna ID seja definido como 500 ao invés de 1, que seria o padrão. Abaixo alguns exemplos de como fazer isso e outras utilizações:

Para saber qual será a próxima numeração a ser inserida na coluna identificadora:

DBCC CHECKIDENT ('tablename', NORESEED)

Se quiser então saber o valor do próximo ID na tabela "usuarios", pode-se usar este comando:

DBCC CHECKIDENT (usuarios, NORESEED)

Para definir o próximo valor da sua coluna ID para 1000, use o seguinte:

DBCC CHECKIDENT (usuarios, RESEED, 999)

Note que o próximo valor será 1000, pois é o valor informado no comando + 1.

Um último detalhe é que você pode envolver o nome da tabela com aspas simples, ou os colchetes quando estiver falando em situações especiais como nome de tabela com espaços (o que eu não gosto) ou caminho completo da tabela:

DBCC CHECKIDENT ( 'seubancodedados.dbo.usuarios', RESEED, 999)

[]'s e até a próxima!

quinta-feira, 13 de maio de 2010

Qual sua postura ao fazer uma m… ?

Por acaso procurando sobre ITIL, achei no blog Profissionais de Tecnologia este artigo, onde o autor comenta uma situação que muitos de nós já viveram que é o dia em que fizemos uma, com perdão da palavra, cagada das grandes.

Vale a pena dar uma olhada no post completo: http://www.profissionaisdetecnologia.com.br/blog/?p=116

[]’s

sexta-feira, 7 de maio de 2010

Zen Coding

Olá amigos!

Aqui estou eu novamente, falando agora brevemente sobre programação web, especificamente, HTML.

Desde seu surgimento, o desenvolvimento em HTML manteve mais ou menos um padrão, sem passar por grandes mudanças em sua estrutura, se mantendo como uma linguagem de marcação hipertexto simples. Lembro por exemplo quando ainda muita gente codificava no bloco de notas ou editores toscos (para este fim, claro!) quaisquer.

Quando surgiram FrontPage e, especialmente, o DreamWeaver foi “a” revolução! hehehe

Bem, dada a introdução, Zen Coding vem para dar uma chacoalhada na forma de escrita de páginas web. Mal comparando talvez, é algo que se assemelha aos code snipets do Visual Studio, os quais estamos bem familiarizados, mas te permitindo também colocar um bocado de semântica em ação.

Abaixo um video muito interessante sobre esta técnica chamada Zen Coding.

Muito interessante, ao meu ver é sim uma nova maneira de codificar em HTML e compensa dedicarmos um tempo ao assunto.

Fonte: http://meiobit.com/65450/zen-coding-html/

terça-feira, 16 de março de 2010

Capacitação da MS para estudantes

Olá amigos,

A Microsoft está com um programa para capacitação de estudantes que parece ser muito interessante.
Como vira e mexe somos abordados sobre os passos para começar a desenvolver em tecnologias MS, porque não já ir direto à fonte?

Mais informações:
http://info.abril.com.br/noticias/carreira/ms-tem-capacitacao-gratis-para-estudantes-16032010-7.shl

sexta-feira, 4 de dezembro de 2009

Preciso voltar…

Olá meus caros!

Estou com vários “projetos” de posts na agulha, entre eles:

  • Série de posts sobre Business Intelligence usando tecnologia Microsoft;
  • Série de posts sobre arquitetura MVP (Model View Presenter);

O grande problema é que, neste momento, outros projetos (pessoais) tomaram conta do meu tempo. Estou fazendo parte de alguns projetos musicais (sim, eu tenho vida pessoal…) para o natal, e os ensaios estão uma loucura.

Mas garanto que eu voltarei. Eu preciso.

Ps.: Aproveitando, meu twitter: http://twitter.com/arnascimento

sexta-feira, 9 de outubro de 2009

Ótimo Blog de Sharepoint


Olá amigos, tudo em paz?

Acessem o blog sharepoint-br do meu amigo Diego Humel, com informações precisas sobre Sharepoint e afins, tudo em português.
Bom para quem já conhece ou para quem quer conhecer, inclusive com posts sobre a evolução do Sharepoint e aplicações deste.

[]'s

quinta-feira, 1 de outubro de 2009

C# - Yield return

Olá, amigos! Hoje falarei sobre uma funcionalidade interessante do C#.

Existem algumas funcionalidades simples que poupam um trabalhão mas nem sempre são usadas. Como uma dessas funcionalidades, podemos considerar o iterador "yield".

Esta funcionalidade está disponível desde a versão 2.0 do C# mas acaba passando despercebida pela maioria dos desenvolvedores.
Basicamente, o operador "yield" é usado para iterar através de objetos retornados por um método. Ele cria um mecanismo de estado via IL para que seja possível criar métodos que conservem o seu estado sem ser necessário manter o estado via código.

Como exemplo simples, vamos usar um exemplo simples que retorna os itens pares em uma coleção:

public IEnumerable RetornaPares(int[] numeros)
{
    List<int> pares = new List<int>();
    foreach (int n in numeros)
    {
        if (n % 2 == 0)
            pares.Add(n);
    }
    return pares;
}

Normalmente usamos um list para armazenar os itens a serem retornados.
Usando yield return ficaria assim:

public IEnumerable PegarPares(int[] numeros)
{
    foreach (int n in numeros)
    {
        if (n % 2 == 0)
            yield return n;
    }
}

Veja que o yield faz o trabalho para você e retorna o resultado correto, porém iterando pelos itens sem a intervenção do desenvolvedor, não sendo necessário criar nenhuma lista para o armazenamento.

Até a próxima!

Referências:

http://www.c-sharpcorner.com/UploadFile/rmcochran/yieldreturn04022006113850AM/yieldreturn.aspx

http://www.magodigital.info/post/Operador-Yield-do-C.aspx

sexta-feira, 20 de março de 2009

Problema na instalação do SQL 2005

Amigos,
Enfrentei um problema muito estranho na instalação do SQL 2005 na minha máquina em casa. A mensagem era mais ou menos a seguinte:

SQL Server Setup Failed to compile the Managed Object Format (MOF) file
C:\Program Files\Microsoft SQL Server\90\Shared\sqlmgmproviderxpsp2up.mof.
To proceed, see "Troubleshooting an Installation of SQL Server 2005" or "How
to: View SQL Server 2005 Setup Log Files" in SQL Server 2005 Setup Help
documentation.

Era um problema no WMI (Windows Management Instrumentation) e foi necessário fazer algumas correções.
Esses dois links me ajudaram a resolver:

http://www.mydatabasesupport.com/forums/sqlserver-faq/242406-error-when-installing-sql-2005-a.html

http://windowsxp.mvps.org/repairwmi.htm

Solução comprovada.

Abraço!

quinta-feira, 5 de março de 2009

Retornando Listas do Sharepoint

A integração entre as ferramentas Microsoft pode e deve ser sempre utilizada ao favor dos desenvolvedores e usuários.

A ferramenta WSS, ou Windows Sharepoint Services oferece uma gama variada de serviços para compartilhamento de informações e um ambiente completo de colaboração.

Neste post vamos criar um webapplication simples para retornar as listas de um determinado site do Sharepoint:

  1. Criar um projeto WebApplication;
  2. Fazer referência ao web service na Solution Explorer, clicando com o botão direito sobre o item Web References, Add Web Reference;
    1. Inserir a URL da sua aplicação SharePoint no campo URL e clicar em GO;
    2. Definir um nome da sua referência no campo Web Reference Name e clicar em Add Reference;
  3. Inserir um asp:ListBox ao formulário default1.aspx que foi gerado pelo BIDS;
  4. Inserir um asp:Button;
  5. Duplo click sobre o botão Button1;
    1. Vai surgir a página de edição de código;
    2. Copiar o seguinte código:

/*Declara e inicializa uma variável para listas do web service*/

suporteint.Lists myservice = new suporteint.Lists();


/*Autentica o usuário corrente, passando suas credenciais default para o Web service do System Credential Cache */

myservice.Credentials = System.Net.CredentialCache.DefaultCredentials;


/* definir a propriedade URL do serviço para o seu subsite. A não definição desta propriedade retornará as listas no Web Site Raiz.*/

myservice.Url = "http://<seu site>/_vti_bin/Lists.asmx";


/*Declare um objeto XmlNode e inicialize-o com o XML response do método GetListCollection. */

System.Xml.XmlNode node = myservice.GetListCollection();


/*Varra através do resultado XML e defina o valor do atributo "título" para cada lista. */

foreach (System.Xml.XmlNode xmlnode in node)

{

ListBox1.Items.Add(xmlnode.Attributes["Title"].Value);

ListBox1.Rows++;

}

  1. Clique start no menu debug para executar a aplicação;
  2. Clique no botão "Button1" para retornar a relação de listas do seu site sharepoint informado.

Compensa estudar os WebServices e métodos disponibilizados para acesso a listas e dados do Sharepoint.

Referência: http://msdn.microsoft.com/en-us/library/ms450301.aspx


sexta-feira, 16 de janeiro de 2009

Erro SSIS: product level is insufficient

Eu havia desenvolvido um pacote SSIS, testado exaustivamente no ambiente de desenvolvimento e, depois disso, instalamos o pacote no ambiente de testes do cliente.
Quando fui executar o pacote, diretamente no SSIS obtive um erro absolutamente inesperado:

Product level is insufficient for [nome do objeto]

- O pacote estava sendo executado a partir do SSMS apontando para outro servidor, onde havia sido instalado o pacote.
- Este servidor onde estava sendo executado o SSMS não possui o serviço do SSIS instalado, e este serviço está instalado somente no servidor "B", onde foi instalado o pacote.

Pesquisando na web, aprendi algumas coisas interessantes sobre o comportamento e execução dos pacotes SSIS:
1) Quando se executa um pacote SSIS, ele é executado no servidor "A", ou seja, o que chama a execução, e utiliza todos os recursos desde CPU, inclusive os serviços. Logo, é necessário que o serviço do SSIS esteja instalado no servidor que faz a chamada ao pacote;
2) Uma forma de resolver esta questão, para o caso de não poder instalar o serviço do SSIS na máquina que vai chamar o pacote é agendar um SQL Job que faça a chamada ao pacote;

Fiz os testes em ambas as situações e tudo ocorreu ok!

Fontes:
http://blogs.msdn.com/michen/archive/2006/11/11/ssis-product-level-is-insufficient.aspx
http://blogs.msdn.com/michen/archive/2006/08/11/package-exec-location.aspx

Ps.: Depois disso tive um outro problema, que fica para outro post...

quinta-feira, 16 de outubro de 2008

SSAS porta default

Amigos,

Instalando uma solução de BI num determinado cliente, me deparei com um problema para acessar os dados dos cubos através do MS Excel. A infra do cliente bloqueou algumas portas e, até o momento, não sabia qual porta deveria ser liberada para poder acessar os cubos corretamente.
Fazendo uma pesquisa pela web, localizei a informação, e aqui estão 3 dos links mais interessantes que eu achei:

Ms TechNet
http://www.microsoft.com/technet/prodtechnol/sql/2005/ssasproperties.mspx
http://www.ssas-info.com/analysis-services-faq/29-mgmt/75-what-tcp-port-ssas-2005-uses

http://www.ssas-info.com/analysis-services-faq/36-excel/98-how-to-disable-excel-pivot-table-security-warning-data-connections-have-been-disabled-enable-this-content
Este último na verdade trata de outra questão de segurança no Excel, mas vai no bolo! ;-)

Então, a porta default do SSAS é a 2383, e esta deve ser usada pois cada named instance no SSAS gera uma porta dinâmica.

[]'s

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.