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;
segunda-feira, dezembro 06, 2010
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.
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.
fonte:http://www.lean.org.br
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
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
terça-feira, setembro 07, 2010
segunda-feira, agosto 16, 2010
sexta-feira, agosto 13, 2010
sábado, março 20, 2010
Team System - Remover Projeto e Desfazer check-out de outro usuário
Achei duas soluções bacanas pra problemas com o Team System:
Remover projeto do Team Foundation Server
Desfazer check-out de outro usuário no Team Foundation Server
Esse ultimo eu fazia via sql direto no banco do TS!!
Fonte: Blog do Ronie
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
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/)
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:
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();É isso ai, vivendo e aprendendo Linq!
options.LoadWith<Documento>(s => s.TipoDocumento);
DataContext.LoadOptions = options;
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
declare @num varchar(5)
set @num= '235'
select @num,
REPLICATE('0', 5 - datalength(@num)) + @num AS [Varchar Formatado]
--Resultado: 00235
Assinar:
Postagens (Atom)