29 julho 2008

[SQL SERVER] Como identificar a versão e qual service pack está instalado?

SELECT SERVERPROPERTY('productversion')
SELECT SERVERPROPERTY('productlevel')

[SQL SERVER] Criar tabela a partir de outra via script

Se você tem uma tabela, e quer criar outra com os mesmos dados mas alterando a ordem de colunas, ou até adicionar e excluir alguma outra coluna, pode usar essa solução.

select

campo1
,campo2
,campo3

into NOMEDANOVATABELA
from NOMEDOBANCO..NOMEDATABELA

25 julho 2008

[SQL SERVER] Desabilitar identity

Desabilitando identity no SQL SERVER 2000.
para desabilitar:set IDENTITY_INSERT nomeTabela on
para habilitar:set IDENTITY_INSERT nomeTabela off
OBS.: se vc esquecer de habilitar o campo identity não tem problema, pois o comando só vale para a conexão atual.

22 julho 2008

[REPORT BUILDER] Como usar um mesmo filtro duas vezes?

Se você está utilizando o Report Builder você quer utilizar um período num filtro, e seus registros devem estar dentro desse período, mas deve trazer registros anteriores a esse período também em alguns casos, o que fazer? O problema que eu tive foi num Extrato Bancário. Eu precisava trazer todos os débitos e créditos dentro de um período, mas precisava trazer também os débitos/créditos que ainda não foram conciliados até esse período. A solução que eu encontrei foi:

1- Criar um evento no OnCreate do relatório chamando uma procedure para preencher uma tabela ja com os filtros necessários

var
INICIO,FIM,VSQL, FILTRO2:string;
begin
PERIODO := Report.AutoSearchCriteriaByName('NOMEDODATASET', 'CAMPO_PERÍODO').SearchExpression;
FILTRO2 := Report.AutoSearchCriteriaByName('NOMEDODATASET', 'CAMPO_FILTRO2').SearchExpression;
DATA_FIM := StrToDate(Copy(PERIODO, 12, 10));
INICIO := Copy(PERIODO, 1, 10);
FIM := Copy(PERIODO, 12, 10);
CamposREL := TStringList.Create;
CamposREL.add('CAMPO');
VSQL:= ('DECLARE @DATAINI DATETIME ,@DATAFIM DATETIME, @OUTRO_FILTRO INT SET @DATAINI = CONVERT(DATETIME,'''+INICIO+''',103)SET @DATAFIM = CONVERT(DATETIME,'''+FIM+''',103)SET @OUTRO_FILTRO = CONVERT(INT,'+FILTRO2+',1) execute XXX_PROCEDURE_FILTRO_SP @DATAINI,@DATAFIM, @OUTRO_FILTRO select 1 as CAMPO');
execsql(Report, VSQL, CamposREL, false);
end;


2- Criar a tabela a ser preenchida com todos os campos necessários para sua projeção

3- Criar a procedure para preencher a tabela. Abaixo tem um exemplo de uma procedure simples que deleta a tabela, e preenche com o novo filtro.

CREATE PROCEDURE dbo.XXX_PROCEDURE_FILTRO_SP
( @DATA_INICIO DATETIME, @DATA_FIM DATETIME, @FILTRO2 INT )
AS BEGIN
DELETE FROM XXX_TABELA
INSERT INTO XXX_TABELA
(CAMPO1,CAMPO2,CAMPO3,CAMPOX,DATA_EMISSAO,DATA_PAGAMENTO)
SELECT
CAMPO1,
CAMPO2,
CAMPO3,
CAMPOX,
DATA_EMISSAO,
DATA_PAGAMENTO
FROM
XXX_TABELA
WHERE
((DATA_EMISSAO BETWEEN @DATA_INICIO AND @DATA_FIM) OR
((DATA_PAGAMENTO > @DATA_FIM or DATA_PAGAMENTO is null) AND
(DATA_EMISSAO < @DATA_INICIO))) AND (CAMPOX = @FILTRO2
END)

4- Fazer o relatório com essa tabela ja filtrada como dataset principal