AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-47327

Bogdan Bogdanov's questions

Martin Hope
Bogdan Bogdanov
Asked: 2017-12-02 05:41:44 +0800 CST

Problema de comportamento de carta especial?

  • 0

Fiz a pergunta de maneira muito embaçada porque não posso explicar em frases curtas qual é o meu problema.

Em geral tenho um conjunto de procedimentos que transforma texto e XML. Dentro dos procedimentos tenho um monte de variáveis NVARCHAR​​e XMLuma tabela com XMLcoluna. Dentro dos meus dados tenho letras especiais (por exemplo ò). Quando executo todo o código, o caractere especial desaparece e fica visível como ?- o que significa que recebi VARCHARem vez de NVARCHAR.

Em geral consegui tudo ok até as etapas finais. Eu tenho EXECque chamar o procedimento armazenado com a variável construída ad hoc do tipo NVARCHAR. Eu tenho em uma tabela que contém XMLfield. Neste caso consegui ?. Se eu executar o procedimento manualmente (não em EXEC INTO), obtive o símbolo adequado.

Alguma idéia por que isso acontece? Eu verifiquei todas as variáveis ​​e elas são NVARCHAR.

sql-server-2012 xml
  • 1 respostas
  • 48 Views
Martin Hope
Bogdan Bogdanov
Asked: 2017-11-23 09:49:28 +0800 CST

Qual é a diferença entre o SQL Server 2012 SP4 vs SP3 com CU-10?

  • 1

Desculpe, pode ser uma pergunta muito estúpida, mas qual é a diferença entre o SQL Server 2012 SP4 e o SQL Server 2012 SP3 + CU-10?

sql-server-2012 patching
  • 1 respostas
  • 805 Views
Martin Hope
Bogdan Bogdanov
Asked: 2017-11-14 06:38:27 +0800 CST

Para o SQL Server 2012, qual é a melhor maneira de restringir linhas (WHERE ou JOIN)? [duplicado]

  • 2
Essa pergunta já tem respostas aqui :
Uma junção é otimizada para uma cláusula where em tempo de execução? (4 respostas)
Fechado há 4 anos .

Ainda não entendi - é melhor para o desempenho restringir os dados dentro da WHEREcláusula ou dentro da JOINcláusula. Qual é a melhor maneira? Li há muito tempo que não há diferença, mas ainda não tenho certeza. Estou falando do INNER JOIN - nesse caso o resultado é o mesmo.

EXEMPLO:

SELECT * FROM A JOIN B ON (A.X = B.Y) WHERE (A.Z = 5);

vs

SELECT * FROM A JOIN B ON (A.X = B.Y) AND (A.Z = 5);
sql-server sql-server-2012
  • 1 respostas
  • 65 Views
Martin Hope
Bogdan Bogdanov
Asked: 2017-03-02 06:01:25 +0800 CST

Como a exclusão de um número semelhante de linhas pode resultar em um crescimento de log muito diferente?

  • 2

Eu tenho (na minha opinião) comportamento muito estranho de crescimento de log do SQL Server. Eu tenho um banco de dados com aproximadamente 8 GB de tamanho de log. Fiz backup do log de transações e comecei a excluir cerca de 4 milhões de linhas. O arquivo de log não cresceu. Então tentei excluir outros 4,9 milhões de outra tabela - o arquivo de log cresceu para cerca de 26 GB e encheu a unidade.

Consegui consertar a situação, mas fiquei curioso - já que (até onde sei) o arquivo de log contém apenas comandos para excluir registros (neste caso), como pode haver uma diferença tão grande entre 2 operações quando o número de linhas afetadas é apenas 20% diferente?

sql-server sql-server-2012
  • 1 respostas
  • 54 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-12-15 01:57:29 +0800 CST

Como extrair dados dinamicamente de outro banco de dados em função com DBName como parâmetro?

  • 1

Eu tenho um banco de dados principal ( MAIN) e vários bancos de dados clientes ( CLIENTDB). Eu preciso iniciar a consulta MAINe obter dados de CLIENTDB. O banco de dados do cliente também pode ser encontrado no servidor vinculado. Meu problema é que preciso fazer isso em uma função com EXEC, para poder pegar SELECT * FROM SRV.CLIENTDB, mas isso não é permitido pelo SQL Server. Existe outra maneira de fazer isso?

Eu preciso ter um código como dentro da função:

DECLARE @sSRV AS VARCHAR(128) = 'SRV';
DECLARE @sDB AS VARCHAR(128) = 'CLIENTDB1';

EXEC('SELECT * FROM ' + sSRV + '.' + @sDB + '.MyTable');

Preciso de uma função, pois preciso fazer joins com ela dentro do meu motor.

sql-server sql-server-2012
  • 3 respostas
  • 2313 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-11-24 05:52:45 +0800 CST

Qual é o número máximo de variáveis ​​locais que podem participar da operação SET?

  • 11

Eu tenho um procedimento armazenado que contém lógica de negócios. Dentro dele tenho cerca de 1609 variáveis ​​(não me perguntem porquê, é assim que o motor funciona). Eu tento SETuma variável para o valor concatenado de todas as outras variáveis. Como resultado, durante a criação, recebo o erro:

Msg 8631, nível 17, estado 1, procedimento XXX, linha YYY Erro interno: o limite de pilha do servidor foi atingido. Procure um aninhamento potencialmente profundo em sua consulta e tente simplificá-lo.

Percebi que o erro é devido a quantidade de variáveis ​​que preciso utilizar na SEToperação. Posso executar a tarefa dividindo-a em duas.

A minha pergunta é se existem algumas restrições nesta área? Eu verifiquei, mas não encontrei nenhum.

Verificamos o erro descrito neste KB , mas não é o nosso caso. Não usamos nenhuma CASEexpressão dentro do nosso código. Usamos essa variável temporária para preparar uma lista de valores que devem ser substituídos usando uma função CLR. Atualizamos nosso SQL Server para SP3 CU6 (última atualização), mas ainda encontramos o erro.

sql-server sql-server-2012
  • 4 respostas
  • 3389 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-07-27 00:33:57 +0800 CST

Como evitar erro Msg 9514, nível 16, estado 1, linha 3 para servidor vinculado?

  • 1

Eu tenho uma consulta para comparar dados entre meu SQL Server local e o SQL Server vinculado. Meu problema é que a tabela que comparo contém coluna XML. Eu recebo:

Msg 9514, Nível 16, Estado 1, Linha 3 O tipo de dados Xml não é suportado em consultas distribuídas. Objeto remoto [srv].[DB].dbo.[tabela]' tem coluna(s) xml.

Não sei como consertar isso, porque não mostro essa coluna dentro da instrução select. Eu pensei que posso CAST, mas quando a coluna não está na lista de seleção, o que lançar?

Vejo que existe uma solução alternativa com cast by não consigo. Então pode ser que eu perca alguma coisa.

Alguma ideia?

Meu código de teste se parece com:

SELECT 
TA2.ID FROM [DB].[dbo].[table1] TA2
  INNER JOIN [linkedsrv].[DB].[dbo].[table1] PA ON (TA2.ID = PA.ID)

Preciso atualizar o PA:

--UPDATE ALL ON PA

UPDATE XSRV
SET 
  XSRV.[Description] = SRV.[Description], 
  XSRV.[Code] = SRV.[Code], 
  XSRV.[Active] = SRV.[Active], 
  XSRV.[Expired] = SRV.[Expired], 
  XSRV.[SType] = SRV.[SType], 
  XSRV.SupportParameters = CAST(SRV.SupportParameters AS VARCHAR(MAX))
FROM 
  [PANI_TEST].dbo.[Services] AS SRV 
  INNER JOIN (SELECT X.ID, X.Code, X.[Description], X.Code, X.Active, X.Expired, 
      X.SType, CAST(X.XmlParams AS VARCHAR(MAX)) AS XmlParams, X.CreatedDate, X.CreatedBy, 
      X.ModifiedDate, X.ModifiedBy FROM [PANI_TEST].[dbo].[Services] AS X) AS XSRV ON 
    (SRV.ID = XSRV.ID) 
WHERE
  (SRV.[Description]     <> XSRV.[Description] ) OR
  (SRV.[Code]            <> XSRV.[Code]        ) OR
  (SRV.[Active]          <> XSRV.[Active]      ) OR
  (SRV.[Expired]         <> XSRV.[Expired]     ) OR
  (SRV.[SType]           <> XSRV.[SType]       ) OR 
  (CAST(SRV.XmlParams AS VARCHAR(MAX)) <> XSRV.XmlParams);

Claro que o código acima não está funcionando porque utilizo tabela derivada, que não é atualizável. Eu não descobrir agora como atualizar. Se eu usar CAST simples sem tabela derivada, ainda recebo erro.

sql-server sql-server-2012
  • 1 respostas
  • 1991 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-07-08 05:14:08 +0800 CST

Tabela excluída do TSQL 2012 nos gatilhos INSTEAD OF e AFTER?

  • 1

Meu colega me faz uma pergunta muito simples, mas difícil para mim:

Se eu tiver uma deletedtabela com 10 registros na INSTEAD OFtrigger e deletar 8 deles quantos registros terei na deletedtabela na AFTERtrigger?

Acho que seria 10, mas não tenho certeza.

trigger sql-server-2012
  • 1 respostas
  • 64 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-07-07 07:45:54 +0800 CST

Como escapar de caracteres XML no TSQL antes de converter para XML?

  • 6

Eu tenho estrutura XML que é parâmetro de entrada para meu procedimento armazenado . Ele contém elemento com & (que é escapado em XML). Quando eu extraio esse elemento para VARCHAReu receber & que não é um caractere XML válido. Eu preciso escapar dele, antes de converter para XML novamente. Como fazer isso sem REPLACE?

Tenho o seguinte texto: param1=xyz&para2=dasdasdfdas&param3. É uma parte da string de consulta. Eu converti XMLe enviei como parte da estrutura XML:

<zzz xmlns="http://example.com">
  <aaa>aaa</aaa>
  <bbb>param1=xyz&amp;para2=dasdasdfdas&amp;param3</bbb>
</zzz>

Dentro do procedimento armazenado, preciso extraí-lo. Eu faço isso com:

ISNULL(NULLIF(LTRIM(RTRIM(@XMLInput.value('declare default element namespace "http://example.com"; (zzz/bbb)[1]', 'NVARCHAR(250)'))), ''), '');

Depois disso, o valor contém texto normal ( & -s não são escapados - & ).

Depois de algum processamento, preciso colocar essa string dentro de outro XML. Eu faço:

CAST( ... AS XML);

Como & -s não são escapados, recebi um erro.

sql-server t-sql
  • 2 respostas
  • 21214 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-06-16 06:14:58 +0800 CST

Como fazer o script da coleção de esquema XML no SQL Server 2012?

  • 3

Preciso fazer um script de coleções de esquema XML em meu banco de dados e inserir cada xml dentro de um campo da tabela como string.

Preciso fazer isso para comparar as coleções de esquema atuais com as novas coleções de esquema depois que elas são geradas novamente.

Eu não tenho ideia por onde começar!

sql-server sql-server-2012
  • 1 respostas
  • 1667 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-03-25 02:22:45 +0800 CST

Existe uma maneira de validar XML usando variável como esquema?

  • 2

Existe uma maneira de declarar XSD schemacomo variável dentro de uma construção: DECLARE @xml XML(Books)?

Preciso fazer uma validação rápida do XMLuso do XSDesquema que é declarado como variável. Acho que não tem jeito, mas tenho que perguntar.

Se alguém puder propor alguma solução alternativa, também será muito útil.

sql-server sql-server-2012
  • 2 respostas
  • 2300 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-03-19 09:24:00 +0800 CST

Como obter resposta do procedimento armazenado antes de terminar?

  • 9

Preciso retornar um resultado parcial (como uma seleção simples) de um procedimento armazenado antes de terminar.

É possível fazer isso?

Se sim, como fazer isso?

Se não, alguma solução alternativa?

EDIT: Eu tenho várias partes do procedimento. Na primeira parte eu calculo várias strings. Eu os uso posteriormente no procedimento para fazer operações adicionais. O problema é que a string é necessária pelo chamador o mais rápido possível. Portanto, preciso calcular essa string e passá-la de volta (de alguma forma, de um select, por exemplo) e continuar trabalhando. O chamador obtém sua string valiosa muito mais rapidamente.

O chamador é um serviço da Web.

t-sql sql-server-2012
  • 4 respostas
  • 3521 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-02-10 00:42:22 +0800 CST

Erro SQL 2012 CLR: "A transação de contexto que estava ativa antes de inserir ..."?

  • 4

Estou experimentando um erro estranho com SQL 2012e CLR:

A transação de contexto que estava ativa antes de entrar na rotina definida pelo usuário, disparar ou agregar "Minha rotina" foi finalizada dentro dela, o que não é permitido. Altere a lógica do aplicativo para impor o aninhamento estrito da transação.

Não tenho ideia do que pode ser o problema. Alguém pode me dar alguma direção onde procurar?

Em geral, tenho um procedimento armazenado SQL dentro do qual, na UPDATEcláusula, chamo scalar CLR function. A função recebe 2 xmlstrings: uma para xmle outra para xsduma validação de make. A função é chamada várias vezes na consulta.

EDITAR:

Mensagem de erro:

Número do erro: 3991

Gravidade do erro: 16

Estado de erro: 1

Procedimento de erro: sproc_XXX

Linha de erro: 297

Mensagem de erro: A transação de contexto que estava ativa antes de entrar na rotina definida pelo usuário, gatilho ou agregado "CLR_XXX_Xml" foi finalizada dentro dela, o que não é permitido. Altere a lógica do aplicativo para impor o aninhamento estrito da transação.

EDIÇÃO 2:

Eu acho o problema. Quando usamos CLRpara validar XML, sned 1º parâmetro para ser o XSDnome. Em seguida CLR, extraímos o XSDesquema do SQL Server. No nosso caso, temos uma string vazia para o XSDnome, mas mesmo assim try / catcho erro é passado para o procedimento armazenado do SQL Server.

Nossa função retorna 0 / 1então os registros com 0 devem ser atualizados com código de erro.

Mas neste caso recebemos exceção no SQL.

Meu código é:

SQL para atualização

UPDATE FR
SET ErrorCode = 'OUR ERROR CODE'
FROM dbo.DataTable FR
INNER JOIN dbo.TempTable FRN ON (FRN.SessionGUID = @sSessionGUID)
    AND (FRN.IDLog = FR.IDLog)
    AND (FRN.UniqueID = FR.UniqueID)
    AND (
        (FRN.Template LIKE '%##%')
        OR (PANI_Core.dbo.funCLRs_CheckXML('schRPT_' + @sSchema + '_Peliminary', 
     FRN.Template) <> 1)
        OR (NULLIF(FRN.Template, '') IS NULL)
        OR (
            (TRY_CONVERT(DATE, FRN.ExpirationDate) IS NULL)
            AND (NULLIF(FRN.ExpirationDate, '') IS NOT NULL)
            )
        OR (
            (TRY_CONVERT(VARCHAR(35), FRN.EGN) IS NULL)
            AND (NULLIF(FRN.EGN, '') IS NOT NULL)
            )
        OR (NULLIF(FRN.EGN, '') IS NULL)
        OR (
            (TRY_CONVERT(MONEY, FRN.Amount) IS NULL)
            AND (NULLIF(FRN.Amount, '') IS NOT NULL)
            )
        OR (NULLIF(FRN.Amount, '') IS NULL)
        OR (
            (TRY_CONVERT(VARCHAR(32), FRN.UniqueClientID) IS NULL)
            AND (NULLIF(FRN.UniqueCID, '') IS NOT NULL)
            )
        OR (NULLIF(FRN.UniqueCID, '') IS NULL)
        )
WHERE (FR.IDLog = @IDLog)
    AND (FR.ErrorCode IS NULL);

Código CLR:

public static SqlBoolean funCLRs_CheckXml(SqlString XsdSchemaString, SqlString ValueString)
{
    XmlDocument asset1 = new XmlDocument();
    XmlSchema schema1 = new XmlSchema();
    System.Text.StringBuilder o = new System.Text.StringBuilder();
    using (SqlConnection sqlLocalConn = new SqlConnection("context connection=true;"))
    {
        try
        {
            if (XsdSchemaString.ToString().Length == 0)
            {
                try
                {
                    asset1.LoadXml(ValueString.ToString());
                    asset1 = null;
                    return new SqlBoolean(true);
                }
                catch (Exception ex)
                {
                    return new SqlBoolean(false);
                }
            }
            else
            {
                sqlLocalConn.Open();

                SqlCommand cmd = new SqlCommand("SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'" + XsdSchemaString.ToString() + "')", sqlLocalConn);
                cmd.CommandTimeout = 240;

                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    SqlXml xmlData = reader.GetSqlXml(0);
                    using (XmlReader xmlReader = xmlData.CreateReader())
                    {
                        schema1 = XmlSchema.Read(xmlReader, ValidateSchema);
                    }

                    asset1.Schemas.Add(schema1);

                    XDocument oDoc = new XDocument();
                    oDoc = XDocument.Parse(ValueString.ToString());
                    oDoc.Descendants().Where(e => string.IsNullOrEmpty(e.Value)).Remove();

                    asset1.LoadXml(oDoc.FirstNode.ToString());
                    oDoc = null;

                    asset1.Validate((o1, e) =>
                    {
                        if (e.Severity == XmlSeverityType.Error)
                        {
                            o.AppendLine("Error: " + e.Message);
                        }
                    });

                    if (asset1.SchemaInfo.Validity == XmlSchemaValidity.Valid)
                    {
                        asset1 = null;
                        return new SqlBoolean(true);
                    }
                    else
                    {
                        asset1 = null;
                        return new SqlBoolean(false);
                    }
                }
                else
                {
                    asset1 = null;
                    return new SqlBoolean(false);
                }
            }
        }
        catch (Exception ex)
        {
            return new SqlBoolean(false);
        }
        finally
        {
            schema1 = null;
            asset1 = null;
            o = null;
        }
    }
}
transaction sql-server-2012
  • 1 respostas
  • 3345 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-01-10 09:11:50 +0800 CST

Como usar melhor a função CLR do ponto de vista do desempenho (repita dentro de cada banco de dados ou tenha uma função geral)?

  • 7

Fiz uma pergunta sobre a validação do XMLuso XSD schemainside SQL Server 2012(veja o link ). Eu entendo (como eu suspeitava) que preciso usar arquivos CLR Function. A função vai pegar XSD schema texte XML texte vai fazer a validação.

Terei 1 banco de dados de configuração e muitos bancos de dados de instalações. A partir dessa perspectiva, eu me pergunto onde criar essa função - dentro do banco de dados de configuração ou dentro de cada banco de dados de instalação?

Do ponto de vista do suporte, seria melhor ter apenas uma função CLR.

t-sql sql-server-2012
  • 1 respostas
  • 1507 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-01-05 02:40:57 +0800 CST

Validar XML usando XSD dentro da função TSQL no SQL Server 2012?

  • 5

Preciso validar o XML usando XSD dentro do TSQL. Para tornar esta tarefa semi-automatizada, preciso fazer isso dentro da função TSQL.

Para fazer a validação, tenho que definir o valor para XML e, se não for válido, receberei um erro.

Meu problema é que dentro da função TSQL não consigo usar TRY / CATCH. Esta é a maneira adequada e se é possível fazer isso?

t-sql sql-server-2012
  • 1 respostas
  • 974 Views
Martin Hope
Bogdan Bogdanov
Asked: 2015-07-27 03:32:09 +0800 CST

Comportamento estranho na função TSQL (parâmetro com variável int ou NULL se comporta de maneira diferente)?

  • 1

Tive um problema muito estranho hoje com a função TSQL.

A função possui vários parâmetros (int e bit). Um dos (int) é definido com valor NULL.

Ao chamar uma função com NULL dentro da função params retorna ERRO (o erro está ok, pois tento converter '%%'para intvalor). Quando a função é chamada com o parâmetro @p1 cujo valor é NULLa função que está funcionando.

Alguém pode me explicar porque funciona assim?

Nós estamos usando:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Business Intelligence Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

MEU CÓDIGO É: O código que causa o erro:

((@p IS NOT NULL) AND (CONS.IDp = @p)) OR
((@p IS NULL) AND (UFCFD.IDUser IS NOT NULL) AND
 (CONS.IDp = CAST(UFCFD.Value1 AS INT))

OBSERVAÇÃO: Editei a parte "causando erro" porque meu colega colocou uma verificação de proteção. Eu removo essa parte para mostrar o estado original da função (a fonte era:(CONS.IDp = CASE WHEN ISNUMERIC(UFCFD.Value1) = 1 THEN CAST(UFCFD.Value1 AS INT) ELSE NULL END))

A chamada que causa o erro:

SELECT * FROM dbo.myFunc(NULL); 

A chamada que funciona:

DECLARE @p INT = NULL;
SELECT * FROM dbo.myFunc(@p); 

PS Se a pergunta não estiver clara, por favor me avise via comentário.

EDIT2:

Este é o texto completo da função:

CREATE FUNCTION dbo.myFunc
(   
    @IDUser INT, 
    @p INT,
    @IDGrid INT,
    @IsWithLead BIT,
    @IDLeadValueResource INT,
    @IDLanguage INT,
    @IsAllPresent BIT,
    @IDAllValueResource INT
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT
        -99999999 AS ID,
        dbo.funs_GetResourceText(@IDLanguage,@IDAllValueResource) AS [Text],
        -99999999 AS Sort
    WHERE (@IsAllPresent = 1)

    UNION ALL

    SELECT
        0 AS ID,
        dbo.funs_GetResourceText(@IDLanguage,@IDLeadValueResource) AS [Text],
        0 AS Sort
    WHERE (@IsWithLead = 1)

    UNION ALL

    SELECT 
        CONS.IDConsumerType AS ID,
        CASE
            WHEN @IDLanguage = 40001 THEN CONS.ConsumerType_Name_en  
            WHEN @IDLanguage = 40002 THEN CONS.ConsumerType_Name_it 
            WHEN @IDLanguage = 40003 THEN CONS.ConsumerType_Name_de 
            WHEN @IDLanguage = 40004 THEN CONS.ConsumerType_Name_fr 
            ELSE CONS.ConsumerType_Name_en END AS [Text],
        ROW_NUMBER() OVER(ORDER BY CONS.SegmentOrder ASC) AS Sort
    FROM 
        dbo.V_ConsumerTypes AS CONS
        LEFT JOIN dbo.Grids GRD ON (GRD.ID = @IDGrid)
        LEFT JOIN dbo.CONFieldCollection_FieldDefinition FCFD ON
            (FCFD.IDFieldCollection = GRD.IDGridFieldCollection) AND
            (FCFD.FieldName LIKE '%IDp%')
        LEFT JOIN dbo.CONUser_FieldCollection_FieldDefinition UFCFD ON
            (UFCFD.IDFieldCollection = GRD.IDGridFieldCollection) AND
            (UFCFD.IDUser = @IDUser) AND
            (UFCFD.IDFieldCollections_FieldDefinitions = FCFD.ID) 
    WHERE
        ((@p IS NOT NULL) AND (CONS.IDp = @p)) OR
        ((@p IS NULL) AND (UFCFD.IDUser IS NOT NULL) AND
         (CONS.IDp = CAST(UFCFD.Value1 AS INT))
)

A chamada que funciona é:

DECLARE @IDUser INT = -100;
DECLARE @p INT = NULL;
DECLARE @IDGrid INT = 17;
DECLARE @IsWithLead BIT = 0;
DECLARE @IDLeadValueResource INT = 0;
DECLARE @IDLanguage INT = 40002;
DECLARE @IsAllPresent BIT = 1
DECLARE @IDAllValueResource INT = -177;

DECLARE @dt DATETIME = GetDate();
SELECT * FROM dbo.fun_ClROME_MdFillComboConsumerTypes(@IDUser, @p, @IDGrid, @IsWithLead, @IDLeadValueResource,
    @IDLanguage, @IsAllPresent, @IDAllValueResource)
ORDER BY Sort

Se usarmos NULLem vez de @p, recebo um erro, porque tento converter '%%'para int- isso está correto.

O problema é que obviamente a função se comporta de maneira diferente, o que é um grande problema.

t-sql sql-server-2012
  • 1 respostas
  • 1044 Views
Martin Hope
Bogdan Bogdanov
Asked: 2015-06-26 23:35:07 +0800 CST

Por que meu espelho de banco de dados é interrompido após alterar as configurações do grupo de arquivos de RESTRICTED_USER para MULTI_USER?

  • 9

Meu ambiente é o seguinte: VMWare 5.5 servidor vitalizado MS Windows Server 2008R2 Enterprise domain e SQL Server 2008 R2 Enterprise . Armazenamento centralizado com conexão Fibre Channel.

Eu tenho partições no meu arquivo SQL Server DB. Eu tenho 2 file groups: um com dados ao vivo (FG1) , segundo com dados históricos (HDG) .

O segundo grupo de arquivos é read-only. A cada mês, faço movimentos nas partições - adiciono novos dados (do mês anterior) aos dados históricos. Este processo é automático .

Mudamos nosso banco de dados para um novo servidor. Inicialmente, tive que fazer o processo manualmente . Durante esta operação meu espelho quebra (após a operação 3 - veja o fluxo do processo abaixo) com o seguinte erro:

NO SERVIDOR PRINCIPAL:

LINHA 0 em LOG:

Date        15.6.2015 20:54:11
Log     SQL Server (Current - 16.6.2015 07:55:00)

Source      spid84

Message
Setting database option MULTI_USER to ON for database MYDB.

LINHA 1 no LOG:

Date        15.6.2015 20:54:11
Log     SQL Server (Current - 16.6.2015 07:55:00)

Source      spid18s

Message
Error: 1453, Severity: 16, State: 1.

LINHA 2 no LOG:

Date        15.6.2015 20:54:11
Log     SQL Server (Current - 16.6.2015 07:55:00)

Source      spid18s

Message
'TCP://10.201.27.154:5022', the remote mirroring partner for database 'MYDB', encountered error 823, status 3, severity 24. Database mirroring has been suspended.  Resolve the error on the remote server and resume mirroring, or remove mirroring and re-establish the mirror server instance.

OBSERVAÇÃO: executei esta operação no servidor antigo muitas vezes automaticamente e nunca tive esse erro.

NO SERVIDOR ESPELHO:

LINHA 1 no LOG:

Date        15.6.2015 20:54:11
Log     SQL Server (Archive #3 - 15.6.2015 21:33:00)

Source      spid17s

Message
Error: 823, Severity: 24, State: 3.

LINHA 2 no LOG:

Date        15.6.2015 20:54:11
Log     SQL Server (Archive #3 - 15.6.2015 21:33:00)

Source      spid17s

Message
The operating system returned error 5(Access is denied.) to SQL Server during a write at offset 0000000000000000 in file 'e:\Databases\MYDB_HISTRICAL.ndf'. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

MEU PROCESSO É O SEGUINTE:

1. Faço vários backups do Banco de Dados (Full, File Group e TLog backups).

2. Eu defino DB para RESTRICTED_USER(para permitir a remoção somente leitura do sinalizador de grupo de arquivo histórico por script).

2a. Eu removo READ-ONLYa bandeira do meu grupo de arquivos históricos.

3. Eu defino DB para MULTI_USERpermitir a operação normal do nosso software.

4. Eu atualizo as partições para que os dados sejam movidos para o grupo de arquivos históricos.

5. Repito as etapas 2 , 2a e 3 em para poder definir o grupo de arquivos históricos SOMENTE LEITURA novamente.

6. Faço backups novamente.

Alguém tem ideia de por que recebo esse erro?

EDIT: Recebemos o mesmo problema durante as diferentes fases do procedimento. Esta é a única situação em que o espelho quebra, então suponho que o problema esteja dentro do procedimento, mas não consigo descobrir o porquê!

sql-server partitioning
  • 1 respostas
  • 1091 Views
Martin Hope
Bogdan Bogdanov
Asked: 2014-11-11 06:52:25 +0800 CST

Como restaurar corretamente o banco de dados de backups de grupos de arquivos?

  • 2

Eu tenho um erro muito estranho (do meu ponto de vista) ao tentar restaurar o banco de dados do servidor SQL de uma série de backups de grupos de arquivos.

Aqui está minha configuração atual:

Eu tenho DB com 2 arquivos, 2 grupos de arquivos e 1 arquivo de log.
1º grupo (chamado PRIMARY não é somente leitura e contém meus dados atuais).
2º é (chamado HISTÓRICO) é somente leitura.

Eu também tenho particionamento.

Por falta de espaço faço o seguinte:

  1. Após algumas operações de serviço (mover dados de PRIMARY para HISTORICAL FG) faço backup COMPLETO do banco de dados (todos os meses).
  2. Depois disso, faça backup COMPLETO de ambos os grupos e, em seguida, faça backup de log.
  3. Eu faço backup completo do PRIMARY FG todas as noites.
  4. Eu faço backup diferencial PRIMARY FG a cada hora.
  5. Eu faço backup t-log a cada 15 minutos.

Minha estratégia é minimizar o espaço necessário para backups.

Em caso de falha, restaurarei o backup COMPLETO desde o início do mês. Depois disso, restaurarei o backup HISTÓRICO (que é apenas um para cada mês). Depois disso, restaurarei o backup PRIMARY FG completo no horário desejado (não tenho certeza se devo restaurar o backup PRIMARY FG após o backup COMPLETO do banco de dados). Como última etapa, restaurarei o backup do t-log e retornarei o banco de dados ao estado operacional (se necessário).

Eu faço essas operações no passado. No momento, recebo o erro de que o LSN que tentei restaurar é muito recente. Por que isso aconteceu?

sql-server restore
  • 1 respostas
  • 202 Views
Martin Hope
Bogdan Bogdanov
Asked: 2014-10-24 01:06:07 +0800 CST

Verificando arquivos de banco de dados para fragmentação física

  • 2

Pesquisei na Internet e não encontrei uma explicação clara de quando devo tentar desfragmentar arquivos de banco de dados físicos para um banco de dados residente em uma SAN. Eu entendo que existem ferramentas e procedimentos dentro de algumas SANs que lidam com isso, mas também existem SANs que não possuem esses recursos.

Minha pergunta tem 3 partes:

  • Como verificar a fragmentação física dos arquivos do banco de dados?
  • É necessário fazer isso se os arquivos residirem em uma SAN?
  • É necessário criar arquivos de banco de dados físicos maiores para evitar a fragmentação?

Usamos um servidor virtual alugado. O banco de dados está crescendo e temos alguns problemas estranhos. Quero ter certeza de que a desfragmentação não é um problema. Também estou apenas geralmente curioso.

sql-server fragmentation
  • 1 respostas
  • 2856 Views
Martin Hope
Bogdan Bogdanov
Asked: 2014-10-23 06:08:32 +0800 CST

Como obter a instrução que causa o erro 3609?

  • 3

Como descobrir qual instrução causa erro Msg 3609, Level 16, State 1, Line 4 The transaction ended in the trigger. The batch has been aborted.?

O código parece bem direto:

-- 1. Check 1
IF (EXISTS (
... check ...
   ))
BEGIN
  RAISERROR('Does not allow 1', 16, 1);
  IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
  RETURN;
END;

-- 2. Check 2
IF (EXISTS (
... check ...
   ))
BEGIN
  RAISERROR('Does not allow 2', 16, 1);
  IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
  RETURN;
END;

Eu verifiquei se a transação existe, então não devo ver esse erro após o erro levantado.

EDITAR:

Concordo com você @gbn. Eu sei que a operação no TRIGGERé uma transação.

O problema é que no nosso código (escrito por mim e um colega) existe um caso em que RAISERRORnão dispara rollbacks. Vejo isso na prática - o erro é gerado pelo gatilho, mas os novos dados são inseridos. A sintaxe era oposta - primeiro ROLLBACKe depois RAISERROR. Descobri que trocar de lugar resolve a situação (não sei por que funciona apenas dessa forma).

Resolvi brincar um pouco com @@TRANCOUNT. Mas quando inseri vários trancounts, o gatilho começou a me dar 3609. A remoção @@TRANCOUNTnão corrigiu o problema. Pois tenho ROLLBACKcom cheque se existe a transação aberta 3609 é muito estranho para mim. Há outro gatilho, mas mesmo se eu desativá-lo, ainda recebo 3609.

sql-server sql-server-2008
  • 1 respostas
  • 7029 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve