-- Copiar os arquivos database.MDF e database_LOG.LDF da
-- máquina atual para a pasta <DADOS> da máquina <SERVER>
-- No Query Analizer da máquina <SERVER>, se logar como sa e executar a seguinte procedure:
Exec sp_attach_db 'cartao1',
'D:\TPPRODUCAO\SQL_DADO\cartao1\cartao1_Data.MDF',
'D:\TPPRODUCAO\SQL_DADO\cartao1\cartao1_Log.LDF'
Restore base de dados
WITH REPLACE, MOVE 'CARTAO1_Data' TO
'D:\TPPRODUCAO\SQL_DADO\cartao1\cartao1_Data.MDF',
MOVE 'CARTAO1_Log' TO
'D:\TPPRODUCAO\SQL_DADO\cartao1\cartao1_Log.LDF'
Cria usuario
EXEC sp_addlogin 'usrcartao1','xxxzzz', 'cartao1'
GO
-- coloca o atributo de administrador da base de dados
EXEC master..sp_addsrvrolemember @loginame = 'usrcartao1', @rolename = N'sysadmin'
GO
USE cartao1
GO
EXEC sp_changedbowner 'usrcartao1'
GO
-- Redução do log, rode
backup log cartao1 with truncate_only
-- entre no Interprise Manager
-- click direito no database e selecione "all task"
-- selecione "Shrind Database".
-- click em "OK"
Set DbUser=usr_base
Set DbPwd=usr_senha
Bcp tabela OUT D:\bk\tabela .bcp -o D:\bk\tabela .log -S%Server% -U%DbUser% -P%DbPwd% -c
>>> salvar em exporta.bat
Set DbUser=usr_base
Set DbPwd=usr_senha
Bcp tabela IN D:\bk\tabela .bcp -o D:\bk\tabela .log -S%Server% -U%DbUser% -P%DbPwd% -c
>>>> salvar em importa.bat
BCP "SELECT TOP 10 NSUCREDITO FROM cartao1..LANCREDITO" queryout C:\TT.txt -c -E -Uxxx -Pzzz -SVSEGER01\VSEGER01
criar tabele tmp
SELECT * INTO TMP_VVPF FROM VVPF WHERE DTMODI='@@'
criar LINK entre bases
-- CRIAR UM LINK ENTRE SERVIDORES SLQSERVER -
-- use o query analyzer e login como SA
-- @server = N'FC', (nome do link)
-- @srvproduct=N'vLinkFC', (descricao do link)
-- @provider=N'SQLOLEDB', (dll a ser utlizada)
-- @datasrc=N'10.1.1.18' (ip do servidor remoto)
EXEC master.dbo.sp_addlinkedserver
@server = N'FC',
@srvproduct=N'vLinkFamilyCard',
@provider=N'SQLOLEDB',
@datasrc=N'10.1.1.18'
-- CRIAR O LOGIN
-- @rmtsrvname=N'FC', (nome o link)
-- @useself=N'True', (se varios usuarios pode usar o link)
-- @locallogin=N'usr_base', ( usuario do servidor local )
-- @rmtuser=N'usr_base1', (usuario do servidor remoto)
-- @rmtpassword='usr_senha' (senha do servidor remoto)
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'FC',
@useself=N'True',
@locallogin=N'usr_base',
@rmtuser=N'usr_base1',
@rmtpassword='usr_senha'
manutenção de tabelas
Executar um comando externo a partir de uma procedure
EXEC MASTER..XP_CMDSHELL 'del D:\ABC.SQL'
INSERT TAB_local A PARTIR DE TAB_remota ATRAVÉS DO LINK
INSERT INTO TAB1_local SELECT * FROM FC.nomebase.dbo.TAB1_remoto RM WHERE RM.COL1 NOT IN (SELECT COL1 FROM TAB1_local)
UPDATE EM TAB_local COM DADO TAB_remota ATRAVÉS DO LINK
UPDATE TAB1 SET TAB1.COL1 = RM.COL2
FROM TAB1 INNER JOIN FC.nomebase.dbo.TAB2 RM ON RM.COL3 = TAB1.COL3
APAGA COLUNA TABELA
ALTER TABLE TAB1 DROP COLUMN COL1
ALTERA TAMANHO DA COLUNA
ALTER TABLE TAB1 ALTER COLUMN COL1 VARCHAR(35) NULL
UPDATE COLUNA
UPDATE TAB1 SET COLUNA ='N' WHERE COLUNA='S'
UPDATE COLUNA TAB1 COM SELECT TAB2
UPDATE TAB1 SET
COL2 = T2.COL2,
COL3 = T2.COL3
FROM TAB1 T1
INNER JOIN TAB2 T2 ON T2.COL1 = T1.COL1
WHERE
T1.COL1 IN (21, 31)
INSERT A PARTIR DE OUTRA TABELA
INSERT INTO TAB1 SELECT * FROM TAB2 WHERE COL1 NOT IN (SELECT COL1 FROM TAB1)
ou
INSERT INTO TAB1 (COL1,COL2,COL3)
SELECT
TB2.COL1,TB2.COL2,TB2.COL3
FROM
TAB2 TB2
WHERE
TB2.COL1 = XPTO
CRIAR UMA TABELA
CREATE TABLE NomeTabela
(
CNPJ_ADM char(14) NOT NULL,
MESES int NULL,
LIMITE_CPF float NULL,
DTFECHA varchar(10) NULL,
CNPJ_SACADO char(14) NULL
)
go
APAGA TABELA
criar tabele tmp
criar LINK entre bases
-- use o query analyzer e login como SA
-- @server = N'FC', (nome do link)
-- @srvproduct=N'vLinkFC', (descricao do link)
-- @provider=N'SQLOLEDB', (dll a ser utlizada)
-- @datasrc=N'10.1.1.18' (ip do servidor remoto)
EXEC master.dbo.sp_addlinkedserver
@server = N'FC',
@srvproduct=N'vLinkFamilyCard',
@provider=N'SQLOLEDB',
@datasrc=N'10.1.1.18'
-- CRIAR O LOGIN
-- @rmtsrvname=N'FC', (nome o link)
-- @useself=N'True', (se varios usuarios pode usar o link)
-- @locallogin=N'usr_base', ( usuario do servidor local )
-- @rmtuser=N'usr_base1', (usuario do servidor remoto)
-- @rmtpassword='usr_senha' (senha do servidor remoto)
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'FC',
@useself=N'True',
@locallogin=N'usr_base',
@rmtuser=N'usr_base1',
@rmtpassword='usr_senha'
manutenção de tabelas
EXEC MASTER..XP_CMDSHELL 'del D:\ABC.SQL'
INSERT TAB_local A PARTIR DE TAB_remota ATRAVÉS DO LINK
INSERT INTO TAB1_local SELECT * FROM FC.nomebase.dbo.TAB1_remoto RM WHERE RM.COL1 NOT IN (SELECT COL1 FROM TAB1_local)
UPDATE EM TAB_local COM DADO TAB_remota ATRAVÉS DO LINK
UPDATE TAB1 SET TAB1.COL1 = RM.COL2
FROM TAB1 INNER JOIN FC.nomebase.dbo.TAB2 RM ON RM.COL3 = TAB1.COL3
ADICIONA COLUNA
ALTER TABLE TAB1 add COLUNA VARCHAR(10) NULLAPAGA COLUNA TABELA
ALTER TABLE TAB1 DROP COLUMN COL1
ALTERA TAMANHO DA COLUNA
ALTER TABLE TAB1 ALTER COLUMN COL1 VARCHAR(35) NULL
UPDATE COLUNA
UPDATE TAB1 SET COLUNA ='N' WHERE COLUNA='S'
UPDATE COLUNA TAB1 COM SELECT TAB2
UPDATE TAB1 SET
COL2 = T2.COL2,
COL3 = T2.COL3
FROM TAB1 T1
INNER JOIN TAB2 T2 ON T2.COL1 = T1.COL1
WHERE
T1.COL1 IN (21, 31)
INSERT A PARTIR DE OUTRA TABELA
INSERT INTO TAB1 SELECT * FROM TAB2 WHERE COL1 NOT IN (SELECT COL1 FROM TAB1)
ou
INSERT INTO TAB1 (COL1,COL2,COL3)
SELECT
TB2.COL1,TB2.COL2,TB2.COL3
FROM
TAB2 TB2
WHERE
TB2.COL1 = XPTO
CRIAR UMA TABELA
CREATE TABLE NomeTabela
(
CNPJ_ADM char(14) NOT NULL,
MESES int NULL,
LIMITE_CPF float NULL,
DTFECHA varchar(10) NULL,
CNPJ_SACADO char(14) NULL
)
go
APAGA TABELA
DROP TABLE NomeTabela
CRIA ÍNDICE DA TABELA
CREATE INDEX NomeIndex ON NomeTabela
(
CPFBOLETO
)
go
APAGA ÍNDICE DA TABELA
DROP INDEX NomeTabela.NomeIndex
CRIA UMA CONSTRAINT
ALTER TABLE NomeTabelaQueRecebeChaveEstrangeira
ADD CONSTRAINT NomeConstraint
FOREIGN KEY (NomeColunaTabelaOrigem )
REFERENCES NomeTabelaOrigem
APAGA UMA CONSTRAINT
ALTER TABLE NomeTabela
DROP CONSTRAINT NomeConstraint
CHECA SE EXISTE TABELA TEMPORARIA
IF OBJECT_ID('TEMPDB..#TMP_TABELA') IS NOT NULL
DROP TABLE #TMP_TABELA
TIPOS DE DADOS
BACKUP
EXEC SP_MSFOREACHTABLE @command1= "DBCC DBREINDEX ('?', '', 80)"
backup log nomebase with truncate_only
DBCC SHRINKDATABASE ('nomebase', 10);
DECLARE @name VARCHAR(50), -- database name
@path VARCHAR(256), -- path for backup files
@fileName VARCHAR(256), -- filename for backup
@fileDate VARCHAR(20) -- used for file name
SET @path = 'D:\TPPRODUCAO\SQL_DADO\CARTAO1\bk\'
SET @name = 'nomebase'
SET @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)+
'_'+
SUBSTRING(CONVERT(VARCHAR(20),GETDATE(),108),1,2)+
SUBSTRING(CONVERT(VARCHAR(20),GETDATE(),108),4,2)+
SUBSTRING(CONVERT(VARCHAR(20),GETDATE(),108),7,2)
DECLARE db_cursor CURSOR FOR
SELECT
name
FROM
master.dbo.sysdatabases
WHERE
name = @name
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET
@fileName = @path +
@name +
'_' +
@fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
>>> rode no query analyser
RE-INDEXAÇÃO DATABASE + SHRINK
-- cria o arquivo.txt e escreve 'TESTE_01' no arquivo
CRIA ÍNDICE DA TABELA
CREATE INDEX NomeIndex ON NomeTabela
(
CPFBOLETO
)
go
APAGA ÍNDICE DA TABELA
DROP INDEX NomeTabela.NomeIndex
CRIA UMA CONSTRAINT
ALTER TABLE NomeTabelaQueRecebeChaveEstrangeira
ADD CONSTRAINT NomeConstraint
FOREIGN KEY (NomeColunaTabelaOrigem )
REFERENCES NomeTabelaOrigem
APAGA UMA CONSTRAINT
ALTER TABLE NomeTabela
DROP CONSTRAINT NomeConstraint
CHECA SE EXISTE TABELA TEMPORARIA
IF OBJECT_ID('TEMPDB..#TMP_TABELA') IS NOT NULL
DROP TABLE #TMP_TABELA
TIPOS DE DADOS
SQL Server | Data Precision |
BIT | Integer: 0 or 1 |
TINYINT | Positive Integer 0 -> 255 |
SMALLINT | Signed Integer -32,768 -> 32,767 |
INT | Signed Integer -2^31 -> 2^31-1 |
BIGINT | Signed Integer -2^63 -> 2^63-1 |
REAL | Floating precision -1.79E + 308 -> 1.79E + 308 |
FLOAT | Floating precision -3.40E + 38 -> 3.40E + 38 |
MONEY | 4 decimal places, -2^63/10000 -> 2^63-1/10000 |
SMALLMONEY | 4 decimal places, -214,748.3648 -> 214,748.3647 |
DECIMAL | Fixed precision -10^38 + 1 -> 10^38 - 1 |
NUMERIC | Fixed precision -10^38 + 1 -> 10^38 - 1 |
DATETIME | Date+Time 1753-01-01 -> 9999-12-31, accuracy of 3.33 ms |
SMALLDATETIME | Date+Time 1900-01-01 -> 2079-06-06, accuracy of one minute |
CHARn | Fixed-length non-Unicode string to 8,000 characters |
NCHARn | Fixed-length Unicode string to 4,000 characters |
VARCHARn | Variable-length non-Unicode string to 8,000 characters |
NVARCHARn | Variable-length Unicode string to 4,000 characters |
TEXT | Variable-length non-Unicode string to 2,147,483,647 characters |
NTEXT | Variable-length Unicode string to 1,073,741,823 characters |
BINARY | Fixed-length binary data up to 8,000 characters |
VARBINARY | Variable-length binary data up to 8,000 characters |
IMAGE | Variable-length binary data up to 2,147,483,647 characters |
FUNÇÕES DE DATA
GETDATE()
SELECT CONVERT(CHAR(19),GETDATE(),120) --> 2015-02-24 07:56:03
SELECT CONVERT(CHAR(6),GETDATE(),112) --> 201502
SELECT CONVERT(VARCHAR(19),GETDATE(),103) + ' ' +
CONVERT(VARCHAR(8),GETDATE(),114) --> 17/04/2015 19:02:52
GETDATE() - partes da data
SELECT DATEPART(yyyy,getdate()) ano,
DATEPART(mm,getdate()) mes,
DATEPART(dd,getdate()) dia
GETDATE() - adiciona ano,mes...
SELECT CONVERT(CHAR(10),getdate(),120), CONVERT(CHAR(10),DATEADD(dd,15,getdate()),120)
GETDATE() - diferencas entre datasSELECT DATEDIFF(dd,'2014-06-15','2014-08-25') dias
obs:
yyyy(ano),
mm(mes),
dd(dia),
hh(hora),
mi(minutos),
ss(segundos)
BACKUP e RESTORE
SELECT CONVERT(CHAR(19),GETDATE(),120) --> 2015-02-24 07:56:03
SELECT CONVERT(CHAR(6),GETDATE(),112) --> 201502
SELECT CONVERT(VARCHAR(19),GETDATE(),103) + ' ' +
CONVERT(VARCHAR(8),GETDATE(),114) --> 17/04/2015 19:02:52
GETDATE() - partes da data
SELECT DATEPART(yyyy,getdate()) ano,
DATEPART(mm,getdate()) mes,
DATEPART(dd,getdate()) dia
GETDATE() - adiciona ano,mes...
SELECT CONVERT(CHAR(10),getdate(),120), CONVERT(CHAR(10),DATEADD(dd,15,getdate()),120)
GETDATE() - diferencas entre datasSELECT DATEDIFF(dd,'2014-06-15','2014-08-25') dias
obs:
yyyy(ano),
mm(mes),
dd(dia),
hh(hora),
mi(minutos),
ss(segundos)
BACKUP e RESTORE
EXEC SP_MSFOREACHTABLE @command1= "DBCC DBREINDEX ('?', '', 80)"
backup log nomebase with truncate_only
DBCC SHRINKDATABASE ('nomebase', 10);
DECLARE @name VARCHAR(50), -- database name
@path VARCHAR(256), -- path for backup files
@fileName VARCHAR(256), -- filename for backup
@fileDate VARCHAR(20) -- used for file name
SET @path = 'D:\TPPRODUCAO\SQL_DADO\CARTAO1\bk\'
SET @name = 'nomebase'
SET @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)+
'_'+
SUBSTRING(CONVERT(VARCHAR(20),GETDATE(),108),1,2)+
SUBSTRING(CONVERT(VARCHAR(20),GETDATE(),108),4,2)+
SUBSTRING(CONVERT(VARCHAR(20),GETDATE(),108),7,2)
DECLARE db_cursor CURSOR FOR
SELECT
name
FROM
master.dbo.sysdatabases
WHERE
name = @name
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET
@fileName = @path +
@name +
'_' +
@fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
>>> rode no query analyser
RESTORE
RESTORE DATABASE nomebase FROM DISK = 'D:\arq.BAK' WITH REPLACE, MOVE 'arq_Data' TO 'D:\arq_Data.MDF', MOVE 'arq_Log' TO 'D:\arq_Log.LDF'
ATTACH DATABASE
Exec sp_attach_db 'nomebase','D:\arq_Data.MDF','D:\arq_Log.LDF'
CRIA USUARIO
EXEC sp_addlogin 'usrbase','usr_senha','nomebase'
GO
-- coloca atributo de administrador para rodar master..xp_cmdshell
EXEC master..sp_addsrvrolemember @loginame = 'usrcartao1', @rolename = N'sysadmin'
USE nomebase
GO
EXEC sp_changedbowner 'usrbase'
GO
GO
-- coloca atributo de administrador para rodar master..xp_cmdshell
EXEC master..sp_addsrvrolemember @loginame = 'usrcartao1', @rolename = N'sysadmin'
USE nomebase
GO
EXEC sp_changedbowner 'usrbase'
GO
RE-INDEXAÇÃO DATABASE + SHRINK
EXEC SP_MSFOREACHTABLE @command1= "DBCC DBREINDEX ('?', '', 80)"
backup log nomebase with truncate_only
DBCC SHRINKDATABASE ('nomebase', 10);
backup log nomebase with truncate_only
DBCC SHRINKDATABASE ('nomebase', 10);
Gera um arquivo texto a partir de um select de dentro de uma procedure
-- C:\Temp\LANCREDITO.TXT deve ser um diretorio na maquina onde a base esta rodando
EXEC master..xp_cmdshell 'bcp "SELECT NSUCREDITO,DTEMISSAO,VALOR FROM LANCREDITO" queryout "C:\Temp\LANCREDITO.TXT" -c -t, -S -Uusuario -Psenha -Sdatabase',NO_OUTPUT
Criar arquivo texto a partir de procedureEXEC master..xp_cmdshell 'bcp "SELECT NSUCREDITO,DTEMISSAO,VALOR FROM LANCREDITO" queryout "C:\Temp\LANCREDITO.TXT" -c -t, -S -Uusuario -Psenha -Sdatabase',NO_OUTPUT
DECLARE @EXEC_SQL VARCHAR(512)
SET
@EXEC_SQL = 'echo TESTE_01 > c:\xx.txt'
EXEC master..xp_cmdshell @EXEC_SQL,NO_OUTPUT
-- abre arquivo.txt e escreve 'TESTE_02' no arquivo (continua escrevendo no final do arquivo)
SET
@EXEC_SQL = 'echo TESTE_02 >> c:\xx.txt'
EXEC master..xp_cmdshell @EXEC_SQL,NO_OUTPUT
-- excluir arquivo.txt
EXEC MASTER..XP_CMDSHELL 'del D:\arquivo.txt'
-- exportar campos de uma tabela para arquivo.txt
EXEC master.DBO.xp_cmdshell 'bcp "SELECT CNPJ_ESTABELECIMENTO FROM alocred_operadora" QUERYOUT C:\arquivo.txt -S NomeBancoDados -U usuario -P senha -t ; -r \n -w',,NO_OUTPUT
SET
@EXEC_SQL = 'echo TESTE_01 > c:\xx.txt'
EXEC master..xp_cmdshell @EXEC_SQL,NO_OUTPUT
-- abre arquivo.txt e escreve 'TESTE_02' no arquivo (continua escrevendo no final do arquivo)
SET
@EXEC_SQL = 'echo TESTE_02 >> c:\xx.txt'
EXEC master..xp_cmdshell @EXEC_SQL,NO_OUTPUT
-- excluir arquivo.txt
EXEC MASTER..XP_CMDSHELL 'del D:\arquivo.txt'
-- exportar campos de uma tabela para arquivo.txt
EXEC master.DBO.xp_cmdshell 'bcp "SELECT CNPJ_ESTABELECIMENTO FROM alocred_operadora" QUERYOUT C:\arquivo.txt -S NomeBancoDados -U usuario -P senha -t ; -r \n -w',,NO_OUTPUT
Tira backup da transação a partir de procedure
-- cria o arquivo.txt e escreve 'TESTE_01' no arquivo
-- BCP "SELECT NSUCREDITO FROM LANCREDITO WHERE NSUCREDITO='20150301110717505'" queryout C:\CREDITOAUTORIZADOR_20150301110717505.SQL -c -E -Uusuario -Psenha -Sbasedados
IF (@RETORNOCREDITOAUTORIZADOR='00')
BEGIN
SET NOCOUNT ON
SET
@EXEC_SQL = 'ECHO '+
RTRIM(LTRIM(ISNULL(@NSUPARCELACREDITO,'')))+
' > '+
@PAR_DIR_BK_AUTORIZADOR+
'\'+ 'CREDITOAUTORIZADOR_'+RTRIM(LTRIM(@NSUPARCELACREDITO))+'.SQ0'
-- evita o retorno do MASTER..XP_CMDSHELL na procedure
CREATE TABLE #BKTEMP (LINHA VARCHAR(500) NULL)
INSERT #BKTEMP
EXEC MASTER..XP_CMDSHELL @EXEC_SQL,NO_OUTPUT
DROP TABLE #BKTEMP
END
Copiar arquivos a partir de uma procedure
-- @rc = 0 copiou com sucesso,<> 0 erro
DECLARE @rc int
EXEC @rc = master.dbo.xp_cmdshell 'copy c:\temp\RelGerencial_00000316.pdf c:\temp\RelGerencial_00000316.txt'
PRINT @rc
Dir (lista diretorio) para um arquivo a partir de uma procedure
exec master.dbo.xp_cmdshell 'dir > c:\temp\*.sql',NO_OUTPUT
exec master.dbo.xp_cmdshell 'mkdir "c:\temp\SQL Agent Output\new_job\"',NO_OUTPUT
-- BCP "SELECT NSUCREDITO FROM LANCREDITO WHERE NSUCREDITO='20150301110717505'" queryout C:\CREDITOAUTORIZADOR_20150301110717505.SQL -c -E -Uusuario -Psenha -Sbasedados
IF (@RETORNOCREDITOAUTORIZADOR='00')
BEGIN
SET NOCOUNT ON
SET
@EXEC_SQL = 'ECHO '+
RTRIM(LTRIM(ISNULL(@NSUPARCELACREDITO,'')))+
' > '+
@PAR_DIR_BK_AUTORIZADOR+
'\'+ 'CREDITOAUTORIZADOR_'+RTRIM(LTRIM(@NSUPARCELACREDITO))+'.SQ0'
-- evita o retorno do MASTER..XP_CMDSHELL na procedure
CREATE TABLE #BKTEMP (LINHA VARCHAR(500) NULL)
INSERT #BKTEMP
EXEC MASTER..XP_CMDSHELL @EXEC_SQL,NO_OUTPUT
DROP TABLE #BKTEMP
END
Copiar arquivos a partir de uma procedure
DECLARE @rc int
EXEC @rc = master.dbo.xp_cmdshell 'copy c:\temp\RelGerencial_00000316.pdf c:\temp\RelGerencial_00000316.txt'
PRINT @rc
Dir (lista diretorio) para um arquivo a partir de uma procedure
exec master.dbo.xp_cmdshell 'dir > c:\temp\*.sql',NO_OUTPUT
Cria um diretorio a partir de uma procedure
exec master.dbo.xp_cmdshell 'mkdir "c:\temp\SQL Agent Output\new_job\"',NO_OUTPUT