Short Scripts – Novembro 2012

Short Scripts – Novembro 2012

Salve, salve comunidade.

Estou de volta nesta nova sessão do meu blog Short Scripts. Estes pequenos ou simples scripts podem ajudar em muito nas atividades dos Profissionais de TI em todos os seguintes.

Hoje vou disponibilizar, mais 10 Short Scripts de diversas funcionalidades.

Segue abaixo os 10 Short Scripts para esta galeria:

 

1-      Exemplo – Básico – Substring na cláusula Order By:

Declare @Tabela Table

(Codigo VarChar(15))

 

Insert Into @Tabela Values(‘191-XXX-003’)

Insert Into @Tabela Values(‘192-XXX-003’)

Insert Into @Tabela Values(‘193-XXX-003’)

Insert Into @Tabela Values(‘194-XXX-003’)

Insert Into @Tabela Values(‘195-XXX-003’)

 

Insert Into @Tabela Values(‘191-XXX-001’)

Insert Into @Tabela Values(‘192-XXX-001’)

Insert Into @Tabela Values(‘193-XXX-001’)

Insert Into @Tabela Values(‘194-XXX-001’)

Insert Into @Tabela Values(‘195-XXX-001’)

 

 

Insert Into @Tabela Values(‘191-XXX-002’)

Insert Into @Tabela Values(‘192-XXX-002’)

Insert Into @Tabela Values(‘193-XXX-002’)

Insert Into @Tabela Values(‘194-XXX-002’)

Insert Into @Tabela Values(‘195-XXX-002’)

 

 

Select * from @Tabela

Order By SubString(codigo,Len(Codigo)-2,3) Asc

 

2-      Exemplo – Básico – Refazendo – Numeração de Colunas Identity:

Use Laboratorio

 

Declare @Identity Int

 

—Refazendo numeração Controle de Entrada – Matéria Prima —

Set @Identity=(Select Ident_Current(‘CTEntrada_PQC’))

 

DBCC CheckIdent(‘CTEntrada_PQC’,Reseed,@Identity)

 

—Refazendo numeração Controle de Produção – Moinho —

Set @Identity=(Select Ident_Current(‘CTProducao_Moinho’))

 

DBCC CheckIdent(‘CTProducao_Moinho’,Reseed,@Identity)

 

—Refazendo numeração Controle de Entrada – Recebimento – Látex —

Set @Identity=(Select Ident_Current(‘CTEntrada_Recebimento_Látex’))

 

DBCC CheckIdent(‘CTEntrada_Recebimento_Latatex’,Reseed,@Identity)

 

—Refazendo numeração Controle de Produção – PVM —

Set @Identity=(Select Ident_Current(‘CTProducao_PVM’))

 

DBCC CheckIdent(‘CTProducao_PVM’,Reseed,@Identity)

Go

 

3-      Exemplo – Criando – Array:

DECLARE @StringDaAplicacao VARCHAR(1000)

 

SET @StringDaAplicacao = ‘”jan”, “fev”, “mar”, “abr”, “mai”, “jun”, “jul”, “ago”, “set”, “out”,”nov”, “dez”‘

 

DECLARE @xml XML, @Var VARCHAR(1000)

 

— Retirar as aspas duplas e espaços

SET @Var = REPLACE(@StringDaAplicacao,'”‘,”)

SET @Var = REPLACE(@Var,’ ‘,”)

 

— Substituir o separador por uma tag

SET @Var = REPLACE(@Var,’,’,'</i><i>’)

 

— Colocar as tags iniciais

SET @Var = ‘<e><i>’ + @Var + ‘</i></e>’

 

— Converte para XML

SET @xml = CAST(@Var AS XML)

 

— Retorna os valores em formato tabular

SELECT t.c.value(‘.’,’char(3)’)  FROM @xml.nodes(‘/e/i’) T(c)

 

4-      Exemplo – Removendo – Registros Duplicados:

Create Table #prod

(Product_Code Varchar(10),

Product_Name Varchar(100))

 

INSERT INTO #prod(Product_Code, Product_Name)

VALUES (‘123′,’Product_1’)

 

INSERT INTO #prod(Product_Code, Product_Name)

VALUES (‘234′,’Product_2’)

 

INSERT INTO #prod(Product_Code, Product_Name)

VALUES (‘345′,’Product_3’)

 

INSERT INTO #prod(Product_Code, Product_Name)

VALUES (‘345′,’Product_3’)

 

INSERT INTO #prod(Product_Code, Product_Name)

VALUES (‘456′,’Product_4’)

 

INSERT INTO #prod(Product_Code, Product_Name)

VALUES (‘567′,’Product_5’)

 

INSERT INTO #prod(Product_Code, Product_Name)

VALUES (‘678′,’Product_6’)

 

INSERT INTO #prod(Product_Code, Product_Name)

VALUES (‘789′,’Product_7’)

 

SELECT * FROM #prod;

 

With Dups as

(

Select *, Row_Number() over (partition by Product_Code order By Product_Code) as RowNum

from #prod

)

 

Delete from Dups where rownum > 1;

 

5-      Exemplo –Diversas maneiras de utilizar valores Nulos:

Declare @String VarChar(100)

 

Set @String=”

Select IsNull(@String,’Imagem.jpg’)

 

Set @String=Null

Select IsNull(@String,’Imagem.jpg’)

 

Select Case @String

When ” Then ‘Teste’

Else ‘Imagem.jpg’

End As String

 

6-      Exemplo – Liberando Permissão Grant para todas as tables:

Declare @Contador Int,

@Nome_Table VarChar(50),

@Comando VarChar(200)

 

Set @Contador=0

 

Declare Cursor_Tables Cursor For

Select Name from sysobjects

Where xtype=’u’

And    year(crdate)>=2002

Order by name

Open Cursor_Tables

 

While @Contador <=(Select Count(*) From SysObjects Where xType=’U’ And Year(CrDate)>=2002)

Begin

 

Fetch Next From Cursor_Tables

Into @Nome_Table

 

Set @Comando=’Grant Select On ‘+@Nome_Table+’ To Junior’

Exec(@Comando)

Print ‘Table:’+@Nome_Table+’ permissão de Select liberada para usuário:’+System_User

 

Set @Comando=’Grant Insert On ‘+@Nome_Table+’ To Junior’

Exec(@Comando)

Print ‘Table:’+@Nome_Table+’, permissão de Insert liberada para usuário:’+System_User

 

Set @Comando=’Grant Update On ‘+@Nome_Table+’ To Junior’

Exec(@Comando)

Print ‘Table:’+@Nome_Table+’, permissão de Update liberada para usuário:’+System_User

 

Set @Comando=’Grant Delete On ‘+@Nome_Table+’ To Junior’

Exec(@Comando)

Print ‘Table:’+@Nome_Table+’, permissão de Delete liberada para usuário:’+System_User

 

Set @Comando=’Grant References On ‘+@Nome_Table+’ To Junior’

Exec(@Comando)

Print ‘Table:’+@Nome_Table+’, permissão de References liberada para usuário:’+ System_User

 

Print ‘————————————————//————————————–‘

Set @Contador=@Contador+1

End

 

CLOSE Cursor_Tables

DEALLOCATE Cursor_Tables

 

7-      Exemplo – Encontrando – Colunas com o mesmo nome em Diversas Tabelas:

create table t1

(codigo int)

 

create table t2

(codigo int)

 

— Consultando através do relacionamento entre sys.tables e sys.columns —

select name from sys.tables

where object_id in (select object_id from sys.columns where name = ‘codigo’)

 

— Consultando através do relacionamento entre sys.tables e sys.syscolumns —

select name from sys.tables

where object_id in (select id from sys.syscolumns where name = ‘codigo’)

 

8-      Exemplo – Obtendo o último dia do mês:

 DECLARE @Mes Int,

@Ano Int,

@DataFinal Date

 

Set @Mes = Month(GetDate())

Set @Ano = Year(GetDate())

 

Set @DataFinal = DATEADD(YEAR, @Ano – 1900, DATEADD(MONTH, @Mes, 0)) – 1

 

SELECT CONVERT(VARCHAR, @DataFinal, 103) AS [Último dia de um determinado mês]

GO

 

9-      Exemplo – Realizando Auditoria – In Live:

SELECT [Spid] = session_Id

, ecid

, [Database] = DB_NAME(sp.dbid)

, [User] = nt_username

, [Status] = er.status

, [Wait] = wait_type

, [Individual Query] = SUBSTRING (qt.text,

er.statement_start_offset/2,

(CASE WHEN er.statement_end_offset = -1

THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2

ELSE er.statement_end_offset END –

er.statement_start_offset)/2)

,[Parent Query] = qt.text

, Program = program_name

, Hostname

, nt_domain

, start_time

FROM sys.dm_exec_requests er

INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid

CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt

WHERE session_Id > 50              — Ignore system spids.

AND session_Id NOT IN (@@SPID)     — Ignore this current statement.

ORDER BY 1, 2

 

10-   Exemplo – Obtendo – Versão do SQL Server + EngineEdition:

Select Case SERVERPROPERTY(‘EngineEdition’)

When 1 Then ‘SQL Server Personal or Desktop Engine’

When 2 Then ‘SQL Server Standard’

When 3 Then ‘SQL Server Enterprise’

When 4 Then ‘SQL Server Express’

End AS Edição,

SERVERPROPERTY(‘LicenseType’),

SERVERPROPERTY(‘NumLicenses’)

 

SELECT  SERVERPROPERTY(‘servername’) As “Nome do Servidor”,

SERVERPROPERTY(‘productversion’) As Versão,

SERVERPROPERTY (‘productlevel’) As “Service Pack”,

SERVERPROPERTY (‘edition’) As Edição,

@@Version As “Sistema Operacional” 

Autor: Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. Pós-Graduado no Curso de Gestão e Engenharia de Processos para Desenvolvimento de Software com RUP na Faculdade FIAP – Faculdade de Informática e Administração Paulista de São Paulo. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação pela Uninove – Campus São Roque. Formação MCDBA Microsoft, autor de artigos acadêmicos e profissionais postados em Revistas, Instituições de Ensino e WebSistes. Meu primeiro contato com tecnologia ocorreu em 1994 após meus pais comprarem nosso primeiro computador, ano em que as portas para este fantástico mundo se abriram. Neste mesmo ano, comecei o de Processamento de Dados, naquele momento a palavra TI não existia, na verdade a Tecnologia da Informação era conhecida como Computação ou Informática, foi assim que tudo começou e desde então não parei mais, continuando nesta longa estrada até hoje. Desde 2001 tenho atuado como Database Administrator – Administrador de Banco de Dados – SQL Server em tarefas de Administração, Gerenciamento, Migração de Servidores e Bancos de Dados, Estratégias de Backup/Restauração, Replicação, LogShipping, Implantação de ERPs que utilizam bancos SQL Server, Desenvolvimento de Funções, Stored Procedure, entre outros recursos. Desde 2008 exerço a função de Professor Universitário, para as disciplinas de Banco de Dados, Administração, Modelagem de Banco de Dados, Programação em Banco de Dados, Sistemas Operacionais, Análise e Projetos de Sistemas, entre outras. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping, etc. Trabalhei entre 2011 e 2017 como Administrador de Banco de Dados e Coordenador de TI no FIT – Instituto de Tecnologia da Flextronics, atualmente exerço a função de Professor Universitário na FATEC São Roque. CTO da Galvão Tecnologia, consultoria especializada em Gestão de TI, Administração de Servidores Windows Server, Bancos de Dados Microsoft SQL Server e Virtualização. Possuo titulação Oficial Microsoft MVP e reconhecimentos: MCC, MSTC e MIE.