segunda-feira, 5 de setembro de 2011

 Quando se tenta apagar/diminuir  o ficheiro log, por vezes pode-se tornar um pouco complicado.
Partilho aqui este script que vai ajudar a resolver, mas não se esqueçam de efetuar backup ao vosso sistema.
Basta alterar o nome de BaseDados para a tua base de dados.


 USE  BaseDados
 GO
 DBCC SHRINKFILE(BaseDados_log, 10)
 GO
 BACKUP LOG  BaseDados WITH TRUNCATE_ONLY
  GO
 DBCC SHRINKFILE(BaseDados, 10)
 GO

Aplica-se a: MSSQL Server 2005

sexta-feira, 18 de dezembro de 2009

Os Triggers no MSSQL são muito úteis, mas temos de ter algumas precauções no seu uso, porque  ao usarmos  "nested triggers" o SQL Server só nos permite correr até 32 de uma só vez (execmplo um trigger dispara com um insert numa tabela que depois dispara outro trigger para outra tabela e assim sucessivamente até 32).

Podem ser usados para:

  • Inserir (Insert), actualizar (Update), Apagar (Delete)
Se usar a sintaxe AFTER, ou seja depois de uma acção e também podemos usar a sintaxe FOR

Exemplo usando FOR e deleted :

CREATE TRIGGER Save_Deleted_records
 ON dbo.Table_Test
 FOR DELETE
 AS
 INSERT deleted_records_mark
SELECT * FROM deleted





Exemplo usando AFTER

Create TRIGGER dbo.UpdateTrigger ON dbo.Table3 
AFTER INSERT AS 
 BEGIN 
   SET NOCOUNT ON; 
     declare @ticket  as varchar(8) 
     set @ticket = (select callid from inserted)
     update subset set uticketrem = @ticket where custtype<>'Facility' and callid=@ticket
END
  • Instead of Insert, Update, Delete 
Isto quer dizer que poderá uma outra acção se for um insert poderá não fazer nada ou efectuar outra acção.


CREATE TRIGGER Example_Trigger on Table1
INSTEAD OF INSERT
AS
BEGIN
  -- Instead of inserting you can do other operations
  INSERT INTO Table45
       SELECT RowMatCol, Date_Doc
       FROM inserted
END











Bom Natal e Boas Entradas em 2010
Particionado por  IT Tech BuZ






sexta-feira, 30 de outubro de 2009

Hoje trago-vos uma função que é muito util que "pega" na data actual que é executada  e transforma para este formato numa única string YYYYMMDDHHMMSS (example for 30-10-2009  20:01:01 will be 20091030200101).

Use  ASuaBasedeDados
Create function [dbo].[F_DataHora]()
returns varchar(50)
as
begin
declare @datanext varchar(50)
select @datanext =
(select (substring ((select convert(varchar(10),getdate(),103)),7,4)))+  -- Ano
(select (substring ((select convert(varchar(10),getdate(),103)),4,2)))+ -- Mês
((select (substring ((select convert(varchar(10),getdate(),103)),1,2)))+ -- Dia
replace((select convert(varchar(8),getdate(),108) ),':','')) -- hora e mnutos HHMMSS

return @datanext
end  



Depois podemos experimentar e verificar o resultado:

Use ASuaBasedeDados
Go
Select  [dbo].[F_DataHora]()




20091030203830

sexta-feira, 28 de agosto de 2009

Deve usar as melhores praticas quando estamos a elaborar Stored procedures para evitarmos problemas futuros, vamos ver 1º a sintaxe:


Create Procedure Nametheprocedure
-- Parâmetros input or output ( Variaveis )
As
BEGIN TRY
Begin Transaction
-- Comandos
commit transaction -- Se correr sem erros aplica a transacção na base de dados

END TRY

BEGIN CATCH

SELECT ERROR_NUMBER(), ERROR_MESSAGE()

Rollback -- Em caso erro não aplica a transacção

END CATCH

GO

Em baixo está um exemplo para a abase dados Adventure Works

CREATE PROCEDURE Production.AddProductReview
@ProductID int,
@ReviewerName nvarchar(50),
@EmailAddress nvarchar(50),
@Rating int,
@Comments nvarchar(3850)
as


BEGIN TRY
Begin transaction;
INSERT Production.ProductReview (ProductID, ReviewerName, EmailAddress, Rating, Comments)
VALUES (@ProductID, @ReviewerName, @EmailAddress, @Rating, @Comments)
commit transaction;
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER(), ERROR_MESSAGE()
rollback transaction;
END CATCH

GO

-- Test stored procedure with error handling
EXECUTE Production.AddReview 715, 'Doug', 'doug@siteexample.com', 10, 'Great product!'
GO

Temas relacionados :

SP para copiar ficheiros

domingo, 26 de julho de 2009

A manipulação da data no SQL Server, vamos ver na pratica alguns exemplos:


-- Exemplo 1
select getdate()

Esta função retorna a data actual 2009-07-26 14:55:03.210

-- Exemplo 2
select GETDATE()+60

Neste exemplo adicionamos 60 dias a data actual e o resultado é 2009-09-24 14:56:40.210

-- Exemplo 3
select DATEADD(M,2,getdate()) -- M month, y year, d day

A função DateAdd function adiciona neste exemplo meses ou dias,ou anos, a data actual ou outra colocada em variável . Então adicionando 2 meses a data corrente o resultado é 2009-09-26 14:57:48.117
a diferença de resultados entre o exemplo 2 e 3 (2 dias), porque no exemplo 2 adicionamos 60 dias e não 2 meses.

-- Exemplo 4
select DATEDIFF(DAY,(DATEADD(M,2,getdate())),(GETDATE()+60))

Esta função calcula a diferença entre datas e retorna um numero inteiro, usando o exemplo o resultado é -2

-- Exemplo 5
SET DATEFORMAT dmy;
GO
DECLARE @datevar datetime
Set @datevar=GETDATE()
select @datevar

Neste exemplo formata-mos a data do tipo dd-mm-aaaa


-- Exemplo 6
select substring((convert(varchar(10),@datevar,127)),1,10)
resultado 2009-07-26

Conversão de tipo de dados de DateTime para varchar(10), usando o parâmetro 127 ( yyyy-mm-dd) que nos indica o formato da data

-- Exemplo 7
select substring((convert(varchar(10),@datevar,103)),1,10)
resultado 26/07/2009

Conversão de tipo de dados de DateTime para varchar(10), usando o parâmetro 103 ( yyyy-mm-dd) que nos indica o formato da data (dd/mm/aaaa)

Mais documentação sobre a função convert em http://msdn.microsoft.com/en-us/library/aa226054(SQL.80).aspx

sexta-feira, 5 de junho de 2009

Mais um apontamento nesta rubrica que eu pretendo que seja uma mais valia e como tal acrescente saber. Posto isto, hoje vou-te falar dos Database Triggers estes servem para várias funções referente a auditoria das nossas base de dados em que alteramos as tabelas e necessitamos de colocar numa tabela para efeitos de auditoria. Vou então mostrar-te com um exemplo para evitar que tabelas sejam apagadas ou criadas, atenção é só um exemplo.

Use BaseDados
go
Create TRIGGER [DBTR_Teste_Drop_Create]
ON DATABASE
FOR DDL_TABLE_VIEW_EVENTS
AS
DECLARE @data xml
DECLARE @cmd nvarchar(350)
DECLARE @logMsg nvarchar(400)

SET @data = eventdata()
SET @cmd = @data.value
('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'nvarchar(350)')
SET @logMsg = @cmd + ' (' + SYSTEM_USER + ' on ' + HOST_NAME() + ')'

RAISERROR (@logMsg, 10, 1) WITH LOG

-- Para Visualizar o Comando executado
-- select @cmd

-- Aqui não permitimos criar objectos na base de dados (Exemplo: Create Table)
-- pois efectuamos o rollback

if left(@cmd,6)='Create'

rollback

-- Aqui não permitimos apagar objectos na base de dados (Exemplo: drop table)
-- pois efectuamos o rollback

if left(@cmd,4)='drop'
rollback

Nota: podemos criar uma tabela com as variáveis com o tipo indicado e inserir os erros

terça-feira, 21 de abril de 2009



Sp para copiar ficheiros muito útil

USE [aspnetdb] -- Replace with your DB
GO
/****** Object:  StoredProcedure [dbo].[usp_copiamsg]    Script Date: 04/21/2009 09:22:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create procedure [dbo].[usp_copiamsg]
@msg as varchar(200),
@input as varchar(100)
,@retorno as varchar(200) output
as
Begin 

declare @drive as varchar(100)
declare @drive_dest as varchar(100)
declare @path as varchar(800)
declare @path_dest as varchar(800)
declare @cmd as varchar(800)
declare @ext as char(3)

set @path_dest='\Dest_Path\'
-- Para Exemplo, não esquecer barra de directorio final 
--
set @path='\PROGRA~1\DATA\'
set @drive='c:'
set @drive_dest='d:'
set @cmd='copy '+@drive+@path+@msg+@ext
set @cmd=@cmd+@drive_dest+@path_dest+ltrim(rtrim(@input))+(select  cast(day(getdate())  as varchar(2)))
+(select  cast(month(getdate())  as varchar(2)))
+(select  cast(year(getdate())  as varchar(4)))
+replace((select convert(varchar(8),getdate(),108)),':','')+@ext




-- Para Testar Caminhos e Visualizar
-- select @cmd

exec master..xp_cmdshell @cmd ,no_output

Set @retorno=@drive_dest+@path_dest+ltrim(rtrim(@input))+(select  cast(day(getdate())  as varchar(2)))
+(select  cast(month(getdate())  as varchar(2)))
+(select  cast(year(getdate())  as varchar(4)))
+replace((select convert(varchar(8),getdate(),108)),':','')+@ext

end


segunda-feira, 9 de março de 2009

Depois de uma analise cuidada verifiquei que existe muitos pedidos, ou leitores que passavam por cá, não obtinham a resposta adequada as suas necessidades, por isso cá vai.

Caros o que se deve fazer quando o Windows Vista fica com o Ecrã preto, de certo instalaram alguma aplicação não compativel com o Vista.

A solução mais rápida é efectuar o restauro do sistema depois de entrar em Modo de Segurança.

Vocês perguntam como ?

  1. Desligar o pc e voltar ligar, depois do teste de memória pressionar a tecla F8
  2. Quando o computador ligar e apresentar no ecrã que esta em Modo de Segurança
  3. Seleccionar " Restauro do Sistema"
  4. Escolher o último caso tenha sido muito recentemente, ou escolher outro.
  5. Depois aguarde enquanto o computador repõe o modo de restauro
  6. Quando iniciar normalmente, em principio estará resolvido o problema

Nota Muito Importante:
Os documentos, fotografias e dados de aplicações devem estar salvaguardados através de cópias de segurança.

quarta-feira, 4 de março de 2009

Caros como existe muitas pesquisas sobre este tema aqui vai desta vez com imagens



Vamos ver mais de perto


Convert campo Text para varchar



  • Soma na formula o campo na 1ª posição e agrupa pelo campo2
Whileprintingrecords;
sum ({tabela1.campo1},{tabela1.campo2})

  • Soma dois campos da tabela na formula em baixo
WhilePrintingRecords;
({file.Qty1}+ {file.Qty2})


clique aqui para visualizar uma ajuda



domingo, 18 de janeiro de 2009

Após alguma ausência derivado a diversos acontecimentos profissionais , já reparam que o Blog mudou de nome em virtude do registo do dominio www.ITTechBuZ.com e novo logo.
Este logo transmite a comunicação como grande vertente pilar nas tecnologias de informação com o mundo empresárial e entre todos. Este Blog continua em 2009 a principalmente a publicar para técnicos. Hoje Domingo aproveito para deixar mais um apontamento da rubrica SQL Truques & Dicas com uma SP com um cursor.

SQL Truques & Dicas
Esta sp é para usar para actualizar consumo de horas numa aplicação

--
-- Cria a SP com o nome sp_actualiza_onsite
--
create procedure [dbo].[sp_actualiza_onsite]
as Begin


--
-- Insere Ticket depois de Fechado (Estado 'Closed')
-- Uso um Insert a partir de um Select
--



INSERT INTO [HEAT].[dbo].[Tickets] ([CallId] ,[CallType] ,[CriData] ,[Valor] ,[Saldo] ,[UIDMANUT])


select d.callid,c.calltype,c.closeddate, d.horas_gastas, d.horas_saldo
,d.uidmanut
,c.custid
from detail d

inner join calllog c on c.callid=d.callid
inner join subset s on s.callid=c.callid
inner join config cfg on cfg.u_idreg=d.uidmanut
where (c.calltype='Onsite' or c.calltype='Packs') and c.callstatus='Closed' and c.actualiza<>'SIM'
and c.callid not in (select callid from tickets )

--
-- Actualiza contratos com as Horas Gastas
-- Cursor usado para update
--

-- Declaração do Cursor com o nome de cursor_Tickets
-- Select aonde vai correr o cursor

DECLARE Cursor_tickets CURSOR for
SELECT t.CallId,c.custid,t.Valor,t.UIDMANUT
from tickets t
inner join calllog c on c.callid=t.callid
where t.[CallType]='Onsite' and c.actualiza <>'SIM'

--
-- Declaração de Variaveis para passar do Cursor
--

Declare @Callid varchar(8)
declare @custid varchar(50)
declare @valor decimal(17,2)
declare @uidmanut varchar(25)

set @callid=''
set @custid=''
set @valor=0
set @uidmanut=''


Open Cursor_tickets /* abrir o cursor */

fetch next from Cursor_tickets
into @callid,@custid,@valor,@uidmanut
while @@fetch_Status=0
begin

--- Actualização das Horas Gastas
--- select @valor,@custid,@uidmanut (usado para verificação e teste)

update config set horas_gastas=isnull(@valor,0)+(isnull(horas_gastas,0)) ,horas_saldo=isnull(horas_saldo,0)-isnull(@valor,0)
where u_idreg=@uidmanut and custid=@custid

set @callid=''
set @custid=''
set @valor=0
set @uidmanut=''

fetch next from Cursor_Tickets
into @callid,@custid,@valor,@uidmanut
end
close Cursor_tickets
Deallocate Cursor_tickets

--
-- No Final actualiza a tabela de forma a não repetir os registos já processados
--

update calllog set actualiza='SIM' where callid in (select callid from tickets) and actualiza<>'SIM'


end

domingo, 21 de dezembro de 2008

Votos de Boas Festas e Feliz Ano Novo.





terça-feira, 18 de novembro de 2008

From It Tech Blogers


Esta sp cria automaticamente um trigger a correr a partir de um job no SQL Server, dá muito jeito quando necessitamos de alterar a tabela.

Create procedure [dbo].[sp_creates_trigger]
as
begin



declare @texto nvarchar (800 ) -- Declara a variavel texto

set @texto='CREATE TRIGGER [subset_trig] ON [dbo].[Subtable] AFTER INSERT AS BEGIN SET NOCOUNT ON; declare @tfield as varchar(8) set @tfiled = (select id_num from inserted)
update subtable set ufield = @tifield where customer<>''Web'' and id_num=@tfield
END'
-- set the trigger in table subtable for an action After Inserted that updates the table
exec sp_executesql @texto -- executa sp com a variavel texto
end

Esta funcionalidade é muito boa quando necessitamos de garantir que este trigger está presente.

quinta-feira, 6 de novembro de 2008

Hoje não abordar o Microsoft SQL Server, mas sim o Google Analytics, é pena que outras ferramentas potentes do calibre do Google não me possa fornecer acesso a elas por isso, vamos lá falar.
Estou maravilhado com o Google Analytics e as novas opções que são a possibilidade de configurar relatórios elaborados de acordo com a nossa vontade com as métricas, depois também podemos usar a opção de criar-mos a nossa própria segmentação vou mostar embaixo na imagem para poderem ver aquilo que eu quero dizer.


terça-feira, 30 de setembro de 2008

Nunca foi tão simples colocar link's nos email para efectuar a analise de quantas pessoas chegam ao seu site através do seu email e depois analisar o retorno. vejamos um exemplo :

Vamos enviar um email e nos links devemos colocar a frente o que se encontra a azul
http://jorge.m.cunha.googlepages.com/newsletter3.html?utm_source=Newsletter&utm_medium=email&utm_content=Newsletter&utm_campaign=Newsletter3

A seguir ao seu link colocar o seguinte alterando para o desejado
?utm_source=Newsletter&utm_medium=email&utm_content=Newsletter&utm_campaign=Newsletter3

- O que está a verde é para alterar:
- Utm_source=Newsletter ,ou seja, para determinar qual a nossa acção
- utm_medium=email , ou seja , qual a forma de envio da nossa acção
- utm_content=Newsletter , ou seja, desta forma determino qual o conteúdo
- utm_campaign,ou seja, Nº da Newsletter

Depois desta Informação podemos visualizar a informação seguinte


Não esquecer de colocar o script que coloca também nas suas páginas do seu site

domingo, 21 de setembro de 2008



Imagem do Logo Jorge CunhaNewsLetter 3











Newsletter nº 3


Sumário:


Nesta Newsletter vou vos dar conhecimento de estou a por uma rubrica acerca do Microsoft SQL Server que se denomina de SQL Truques e Dicas em http://itechblogers.tk



Neste momento estou a participar no RVCC para tentar finalizar este trabalho ainda este ano. Umas questões que ponho a todos porque que será que as Empresas Portuguesas, não usam o conceito Web 2 nos seus sites corporativos?, será por falta de conhecimento?, ou porque não acham que tenham vantagem competitiva?



Para Navegar ao Site
Principal




Copyright (C) 2007 Jorge Cunha All rights reserved.
Envie este E-mail aos seus Amigos

segunda-feira, 15 de setembro de 2008



Quando necessitamos de mudar o nome do servidor ao nivel do sistema operativo, torna-se obrigatório mudar o nome do SQL Server

  1. Backup das bases de dados
  2. select @@SERVERNAME devolve o nome do SQL Server
  3. sp_dropserver 'jmc-pc' nome do servidor anterior
  4. go
  5. sp_addserver 'ws-jmc', local nome novo do servidor
  6. go
  7. repetir o passo 2 after depois de reiniciar os serviços do SQL Server para verificar que o nome é aquele que lhe demos no passo 5
  8. Mais Informação em http://msdn.microsoft.com/en-us/library/ms143799.aspx

domingo, 31 de agosto de 2008

Vista do Pinhão

Rio de Onor
Museu da Mascara Ibérico

Bragança Vista do Castelo

Miranda Do Douro

Trancoso


quarta-feira, 30 de julho de 2008






Estava a procura de uma solução para os problemas com as colunas de identity no SQL e encontrei uma solução


Para ver qual o número que esta a nossa coluna de identity:


DBCC CHECKIDENT

(

articles


)
A resposta é que o valor é 6 como se pode visualizar aqui em baixo
Checking identity information: current identity value '6', current column value '6'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Para colocar um novo número na nossa coluna da tabela article:

DBCC CHECKIDENT

(

articles,reseed ,6000


)

retorna:

Checking identity information: current identity value '1000', current column value '6000'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Nota:
Não se deve usar o comando truncate pois este faz um reset a coluna Identity, por esta razão deve-se usar o comando delete.

segunda-feira, 14 de julho de 2008


Vou mostrar como eu uso um select para lêr um ficheiro do Excel




Exemplo:
Select *
FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=D:\importa\Ficheiro_Excel.xls;Extended Properties=Excel 8.0')...Folha1$

Para usarmos com a eficácia que sempre pretendemos. Os cabeçalhos devem ser únicos
e aonde está o Data Source deve-se indicar a localização do ficheiro e a folha do ficheiro de Excel que queremos efectuar o select(nota: o $ faz parte do comando). Os nomes quer do ficheiro quer da folha deve-ser simples, ou seja, sem espaços e caracteres especiais, as colunas do ficheiro de Excel deve estar bem formatadas.

Seja Solidário vá a http://www.ami.pt

quinta-feira, 19 de junho de 2008

Caros Leitores hoje traga-vos um exemplo para evitar
os problemas de campos que são nulos no SQL e como uma simples instrução, podemos resolver o problema
a sintaxe é a seguinte:

Isnull(campo ou expressão,número) , ou seja, Isnull(fila_teste,0)

Explicação se campo for nulo o valor é zero, se a operação for divisão ou multiplicação pode-se usar em vez do zero um 1, ou um case mas em relação a este irei abordar brevemente,
espero que seja útil este "post" e que Portugal
ganhe no Euro 2008 frente a Alemanha.



Site: Pessoal