15/04/2018 Database / sql server

select top ${take} * from (

SELECT

      isnull(Ltrim(RTRIM([CPFCGC_PES])),'') as documento

      ,isnull(RTRIM([IE_PES]), '') as inscricaoEstadual

      ,isnull(Ltrim(RTRIM([NOME_PES])), '') as nome

      ,ROW_NUMBER() OVER (order by CPFCGC_PES) AS rowid

      ,isnull(RTRIM([EMAIL]),'') as email, isnull((select enderecos.* from (SELECT RTRIM(PE.BAIRRO_ENDE) as bairro, 

                     RTRIM(PE.RUA_ENDE) as logradouro,

RTRIM(PE.CEP_ENDE) as cep,

RTRIM(CIDADES.CIDADES) as cidade,

RTRIM(CIDADES.UF) as estado,

RTRIM(TIPOS_ENDERECOS.NOME_TIPE) tipoEndereco 

              FROM   [cobsystems].[dbo].[PESSOAS_ENDERECOS] PE inner join [cobsystems].[dbo].[CIDADES] on PE.CIDADE_COD = CIDADES.CODIGO  inner join [cobsystems].[dbo].[TIPOS_ENDERECOS] on TIPOS_ENDERECOS.COD_TIPE = PE.COD_TIPE

              WHERE  PE.COD_PES = p.COD_PES) as enderecos FOR json path, INCLUDE_NULL_VALUES), '') AS enderecos, isnull((select telefones.* from ( 

              SELECT  RTRIM(PT.NR_TEL) as numero, RTRIM(TIPOS_TELEFONES.NOM_TIP) as tipo

              FROM   [cobsystems].[dbo].[PESSOAS_TELEFONES] PT inner join [cobsystems].[dbo].[TIPOS_TELEFONES] on pt.TIPO_TEL = TIPOS_TELEFONES.COD_TIP

              WHERE  PT.COD_PES = p.COD_PES) as telefones FOR json path, INCLUDE_NULL_VALUES), '') AS telefones FROM [cobsystems].[dbo].[PESSOAS] as p where CPFCGC_PES <> '') as c where rowid > ${skip} order by rowid

funciona da seguinte maneira, o take é a quantidade de registros

o skip, é a posição...ou seja, skip = 0, inicia na posicao 0, skip 50, inicia na posicao 50 e assim por diante.

11/04/2018 Database / sql server

Esse é o maior pulo do gato que eu descobri ultimamente em relação a conversão de Select para Json.

Essa primeira query, cria um objeto P e um objeto F, nao deixando tudo na mesma linha

SELECT 

      [SENHA_USU] as password

      ,[NIVEL_USU] as nivel

      ,[ATIVO_USU] as ativo

      ,[NOME_PES] as displayName

  ,EMAIL as email

      ,[DT_ENTRADA_FUNC] as dtEntrada

      ,[DT_SAIDA_FUNC] as dtSaida

      ,[SALARIO_FUNC] as salario

      ,[CARGO_FUNC] as cargo

      ,[COMMISSAO_FUNC] as comissao

  FROM [cobsystems].[dbo].[USUARIOS] inner join FUNCIONARIOS_OLD on USUARIOS.COD_FUNC = FUNCIONARIOS_OLD.COD_FUNC inner join PESSOAS on PESSOAS.COD_PES = FUNCIONARIOS_OLD.COD_PES order by COD_USU  FOR json auto

 

query arrumada

Essa query deixa tudo na mesma linha!

SELECT m.* 

         FROM (

 

SELECT 

      U.SENHA_USU as password,

      U.NIVEL_USU as nivel,

  IIF(U.ATIVO_USU = 1, 'true', 'false') as ativo,

 

      P.NOME_PES as displayName,

  isnull(P.EMAIL, '') as email,

      F.DT_ENTRADA_FUNC as dtEntrada,

      F.DT_SAIDA_FUNC as dtSaida,

      convert(int, isnull(F.SALARIO_FUNC, 0)) as salario,

      F.CARGO_FUNC as cargo,

      convert(int, isnull(F.COMMISSAO_FUNC,0)) as comissao

  FROM [cobsystems].[dbo].[USUARIOS] as U inner join [cobsystems].[dbo].[FUNCIONARIOS_OLD] F on U.COD_FUNC = F.COD_FUNC inner join [cobsystems].[dbo].[PESSOAS] P on P.COD_PES = F.COD_PES

 

) AS m

         FOR JSON AUTO

02/02/2018 Database / sql server

Essa dica é pra quem quer fazer uma query SQL Server e quer que ela seja disponilizada via JSON.

Usar inner join, com inner join e mais inner join, é uma Merda!

Ex: usando inner join 

SELECT     imovel.cod, 
           imovel.referencia, 
           medias.idmedia, 
           medias.txtpath, 
           h.txatividade 
FROM      [hfbimoveis-bkp].[dbo].[tabImovel] imovel 
INNER JOIN tabmedia medias 
ON         ( 
                      imovel.cod = medias.codimovel) 
INNER JOIN tabimovelhistorico H 
ON         h.codimovel = imovel.cod 
WHERE      imovel.cod = 1133 FOR json auto

[
{"cod":1133,
"referencia":"CL107",
"medias":[
{
"idMedia":3925,
"txtPath":"Cittá Fachadas (4)_640x480.jpg",

"H":[
{"txAtividade":"Cadastrou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"},{"txAtividade":"Atualizou o Laudo"}]}]}]

Olha oque aconteceu? O meu historico foi parar dentro das MEDIAS! Errado neh

Por isso, é preferível fazer usando select, dentro de select

SELECT imovel.cod, 
       imovel.referencia, 
       ( 
              SELECT m.idmedia, 
                     m.txtpath 
              FROM   tabmedia M 
              WHERE  m.codimovel = imovel.cod FOR json auto) AS m, 
       ( 
              SELECT h.txatividade 
              FROM   tabimovelhistorico AS h 
              WHERE  h.codimovel = imovel.cod FOR json auto) AS h 
FROM   [hfbimoveis-bkp].[dbo].[tabImovel] imovel 
WHERE  imovel.cod = 1133 FOR json auto

[
{"cod":1133,
"referencia":"CL107",
"m":[{"idmedia":3925,"txtpath":"Cittá Fachadas (4)_640x480.jpg"}],
"h":[
{"txatividade":"Cadastrou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"},{"txatividade":"Atualizou o Laudo"}]
}]

As medias ficaram em 1 linha, e os historicos ficaram em outra linha!

Espero que isso ajude, tanto quanto me ajudou ;-)

 

09/03/2014 Database / sql server

http://sqlfromhell.wordpress.com/2009/05/24/habilitando-sql-authentication-e-o-usuario-sa/

11/01/2013 Database / sql server

SQL State: 08001, SQL Error Code :17
[DBNETLIB][ConnectionOpen(Connect()).]SQL Server inexistente ou acesso negado.

SOLUÇÃO:

Para resolver este problema:
****************************************************************************
Temos que informar o nome da instância do SQL Server Express.
****************************************************************************

O Sql Server Express, na instalação default, cria uma instância chamada SQLEXPRESS. Estas instância também podem ser criadas nas demais versões do Sql Server, mas isto não vem ao caso para solução do tópico, sugiro ler um pouco mais sobre instâncias do Sql Server.

Para acessar a instância, no campo HostName do DBExpress, além do host, incluia o nome da instância, da seguinte forma:
HostName = *NomeDaMáquina*\SQLEXPRESS

 

05/08/2012 Database / sql server

CREATE FUNCTION FormatDinheiro(@Valor DECIMAL(20, 2))
RETURNS VARCHAR(30)
AS BEGIN
DECLARE
@ValorStr VARCHAR(30),
@Inteiro VARCHAR(30),
@Decimal VARCHAR(3),
@I INT,
@Count INT,
@IntLen INT

SET @ValorStr = CONVERT(VARCHAR(30), @Valor)

SET @ValorStr = RTRIM(LTRIM(REPLACE(@ValorStr, '.', '')))
SET @ValorStr = REPLACE(@ValorStr, ',', '')
SET @Inteiro = ''

IF (Len(@ValorStr) = 1)
BEGIN
SET @Inteiro = '0'
SET @Decimal = '0'+@ValorStr
END
ELSE
BEGIN
IF (Len(@ValorStr) = 2)
BEGIN
SET @Inteiro = '0'
SET @Decimal = @ValorStr
END
ELSE
BEGIN
SET @Decimal = Substring(@ValorStr, (Len(@ValorStr)-1), Len(@ValorStr))
SET @I = 3
SET @Count = 0
WHILE (@I <= Len(@ValorStr))
BEGIN
IF (@Count = 3)
BEGIN
SET @Inteiro = '.'+@Inteiro
SET @Count = 0
END
SET @IntLen = (Len(@ValorStr)+1)-@I
IF (@IntLen >= 0)
BEGIN
SET @Inteiro = Substring(@ValorStr, @IntLen, 1)+@Inteiro
END
SET @I = @I + 1
SET @Count = @Count + 1
END
END
END
IF (@Inteiro = '') SET @Inteiro = '0'
IF (@Decimal = '') SET @Decimal = '00'
RETURN @Inteiro+','+@Decimal
END