segunda-feira, dezembro 06, 2010

SQL Convertendo Colunas em Linhas

Pelo menos uma vez na vida você que trabalha com dados já passou pro este problema, uma tabela com 3 colunas normalizadas e outras 25 que deveriam se transformar em uma unica coluna.
A mágica se chama UNPIVOT, saboreem:


SELECT
[LOTE],
[PRODUTO],
[CAIXA],
NU_TITULO
FROM
   (
SELECT
[LOTE],
[PRODUTO],
[CAIXA],
TITULO1, TITULO2, TITULO3, TITULO4, TITULO5,
TITULO6, TITULO7, TITULO8, TITULO9, TITULO10,
TITULO11, TITULO12, TITULO13, TITULO14, TITULO15,
TITULO16, TITULO17, TITULO18, TITULO19, TITULO20,
TITULO21, TITULO22, TITULO23, TITULO24, TITULO25

FROM
[TAB_ENTRADA_lotes]
) p
UNPIVOT
   (NU_TITULO FOR Titulo IN
      ( TITULO1, TITULO2, TITULO3, TITULO4, TITULO5,
TITULO6, TITULO7, TITULO8, TITULO9, TITULO10,
TITULO11, TITULO12, TITULO13, TITULO14, TITULO15,
TITULO16, TITULO17, TITULO18, TITULO19, TITULO20,
TITULO21, TITULO22, TITULO23, TITULO24, TITULO25)
)AS unpvt;

sábado, novembro 20, 2010

nopCommerce com módulo PagSeguro e Correios

Módulo de pagamento PagSeguro UOL para nopCommerce e
Módulo Correios para nopCommerce.

Após publicar a primeira loja a WikiCode se deparou com a necessidade de fazer as cobranças através de cartão de crédito e ou boleto bancário e o cálculo do frete utilizando o site dos Correios. Não foi surpresa não encontrar um módulo de cobrança que utilizasse uma empresa brasileira, como o PagSeguro da UOL, pois a ferramenta tem diversos colaboradores e a maioria é dos EUA. 

Uma solução foi desenvolvida e está a venda na Wikicode. 

Quem estiver interessado no módulo enviar e-mail para nopcommerce@wikicode.com.br. O mesmo pode ser acessado no site de exemplo publicado no endereço http://loja.wikicode.com.br.

domingo, outubro 10, 2010

Lean Thinking

O termo lean foi cunhado ao final da década de 80 em um projeto de pesquisa do Massachusetts Institute of Technology (MIT) sobre a indústria automobilística mundial. A pesquisa revelou que a Toyota havia desenvolvido um novo e superior paradigma de gestão nas principais dimensões dos negócios (manufatura, desenvolvimento de produtos e relacionamento com os clientes e fornecedores).
Naquela época, a montadora japonesa não estava nem entre as dez maiores do mundo. Em 2009, a Toyota tornou-se a maior em volume de vendas, acumulando vitória após vitória ao longo destas décadas, mostrando as vantagens e benefícios do sistema que desenvolveu. Não se trata de um conceito exclusivo da Toyota, podendo ser aplicado por empresas de qualquer negócio e em qualquer país ou região. Deve ser visto como um sistema de gestão para toda a empresa.
Lean é uma estratégia de negócios para aumentar a satisfação dos clientes através da melhor utilização dos recursos. A Gestão Lean procura fornecer consistentemente valor aos clientes com os custos mais baixos (PROPÓSITO) através da identificação de melhoria dos fluxos de valor primários e de suporte (PROCESSOS) por meio do envolvimento das pessoas qualificadas, motivadas e com iniciativa (PESSOAS). O foco da implementação deve estar nas reais necessidades dos negócios e não na simples aplicação das ferramentas lean.
As práticas envolvem a criação de fluxos contínuos e sistemas puxados baseados na demanda real dos clientes, a análise e melhoria do fluxo de valor das plantas e da cadeia completa, desde as matérias-primas até os produtos acabados, e o desenvolvimento de produtos que efetivamente sejam soluções do ponto de vista do cliente.
A adoção dessa filosofia tem trazido resultados extraordinários para as empresas que a praticam, ainda que poucas empresas tenham conseguido replicar totalmente o sucesso e a eficiência operacional alcançados pela Toyota. Originalmente concebidas como práticas de manufatura, tem sido gradualmente disseminadas em todas as áreas da empresa e também para empresas dos mais diferentes tipos e setores, tornando-se efetivamente uma filosofia e uma cultura empresarial.
Os resultados obtidos geralmente implicam aumento da capacidade de oferecer os produtos que os clientes querem, na hora que eles precisam, nos preços que estão dispostos a pagar, com custos menores, qualidade superior, "lead times" mais curtos, garantindo assim maior rentabilidade para negócio.

quinta-feira, outubro 07, 2010

SQL Server 2008 - Criando os índices necessários

Você sabia que o SQL Server mantem o controle dos índices que ele acha que você deve criar? A "falta de índice" DMVs  é uma grande novidade no SQL Server 2005, que (na minha opinião) parecem ter sido pouco utilizado até agora. Se você quiser ver se esse recurso e poupá-lo do tédio de uma tarde de identificação baixo desempenho de consultas, tudo que você tem a fazer é :

SELECT
  migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,
  'CREATE INDEX [missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle)
  + '_' + LEFT (PARSENAME(mid.statement, 1), 32) + ']'
  + ' ON ' + mid.statement
  + ' (' + ISNULL (mid.equality_columns,'')
    + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END
    + ISNULL (mid.inequality_columns, '')
  + ')'
  + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
  migs.*, mid.database_id, mid.[object_id]
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) > 10
and mid.database_id=33
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

sábado, março 06, 2010

Último acesso a Tabela

SELECT
    
OBJECT_NAME(object_id,database_id) As Tabela, Index_Id,
    last_user_seek, last_user_scan, last_user_lookup, last_user_update
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID() And OBJECTPROPERTYEX(object_id,'IsUserTable') = 1
ORDER BY Tabela, Index_ID

quinta-feira, março 04, 2010

O que foi alterado depois das 18?

Esse script faz parte da serie "30 scripts que não podem faltar no pendrive de um DBA" que terminou em um monte de webcast que somam muito mais de 100 scripts. Esse eu achei particularmente interessante!
Quem tiver interesse pode conseguir mais alguns no blog do Vitor Fava (http://vfava.sqlserverday.com.br/)



------------------------------------------------------------------------------------------------------------
--
-- Script para checar o que foi alterado no database após as 18:00 horas
---
---
USE DB_Mundo_1;
CREATE TABLE Nova_Tabela(cod int, descricao varchar(100));

SELECT name,
 TYPE,
 type_desc,
 create_date,
 modify_date
FROM sys.objects
WHERE TYPE IN ('U','V','PK','F','D','P')
AND modify_date >= Dateadd(HOUR,18,Cast((Cast(Getdate() - 1 AS VARCHAR(12)))AS SMALLDATETIME))
ORDER BY modify_date

--U - Table
--V - View
--PK - Primary Key
--F - Foreign Key
--D - Default Constraint
--P - Procedure

quarta-feira, fevereiro 17, 2010

Linq To SQL - Carregando dados adjacentes e liberando o DataContext

Eu sempre tive problemas quando tentava acessar uma tabela adjacente do objeto retornado pela query do linq depois do dispose, exemplo:
A tabela Documento tem relação com a tabela Tipo de Documento, se eu recupero via Linq uma instancia da tabela Documento, faço o dispose do DataContext e tento acessar a Tipo Documento atravez do relacionamento logo vem a mensagem: Cannot access a disposed object.Object name: ‘DataContext accessed after Dispose.
Descobri uma forma de resolver isso. Se a relação for de 1 pra N e você está com a tabela do lado esquerdo, basta que antes do dispose você acessece Documento.TipoDocumento.Load(). Se estiver do lado do N o jeito é passar configurações de load pro DataContext, exemplo:

DataLoadOptions options = new DataLoadOptions();


options.LoadWith<Documento>(s => s.TipoDocumento);

DataContext.LoadOptions = options;
É isso ai, vivendo e aprendendo Linq!

quarta-feira, fevereiro 03, 2010

SHRINKFILE - TRUNCATE do banco

use db_MeuBanco

 BACKUP LOG db_MeuBanco WITH TRUNCATE_ONLY

 DBCC SHRINKFILE (db_MeuBanco_Log, 1)


**Cuidado, só recomendo rodar isso se você estiver realmente sem espaço na partição do LOG (.mdl) e não tiver outra partição pra onde jogar nem fazer backup.

segunda-feira, janeiro 04, 2010

Queries que vou usar mais tarde

Formatando números com zero a esquerda

declare @num varchar(5)

set @num= '235'

select @num,

REPLICATE('0', 5 - datalength(@num)) + @num AS [Varchar Formatado]

--Resultado: 00235