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-6173

Rachel's questions

Martin Hope
Rachel
Asked: 2014-01-02 16:40:15 +0800 CST

Decidindo quando estender para tabelas filhas

  • 5

Eu tenho uma tabela de entidades. Para propósitos de exemplo, vamos chamá-los de Vehicles: Car, Boat, Motercycle, etc.

O ideal é colocar todas as entidades em uma única Vehiclestabela porque muitas tabelas relacionadas ( VehicleRatings, VehicleComments, VehicleHistoryetc) serão aplicadas a qualquer entidade, não apenas a uma delas.

Mas algumas das entidades têm algumas propriedades individuais que não são compartilhadas com os outros tipos de entidade. No momento, há apenas 1 propriedade extra para uma entidade e 2 para outra. Espero que haja mais alguns que serão identificados mais tarde, mas não muitos no geral.

Como sei quando é melhor criar uma tabela filho para cada tipo de entidade para armazenar essas propriedades individuais, em vez de apenas adicionar uma coluna extra na Vehiclestabela pai? Há alguma pergunta que eu possa fazer a mim mesmo para ajudar a determinar essa resposta?

Estou procurando otimizar principalmente o desempenho da consulta, seguido pela facilidade de manutenção.

database-design
  • 2 respostas
  • 1610 Views
Martin Hope
Rachel
Asked: 2013-05-10 08:24:42 +0800 CST

Se eu fizer failover de um banco de dados, os outros que compartilham o mesmo ponto de extremidade espelhado também falharão?

  • 11

Temos dois bancos de dados configurados para espelhamento em uma única instância do SQL Server: um banco de dados de teste e um banco de dados de produção. Ambos são espelhados para outro servidor usando exatamente os mesmos endpoints.

Se eu for para as Propriedades do Banco de Dados para o banco de dados de teste e clicar no botão "Failover", haverá failover do banco de dados de produção também, já que ambos os bancos de dados compartilham um endpoint de espelho e suas propriedades de Endereços de Rede do Servidor são as mesmas?

insira a descrição da imagem aqui

Estou preocupado porque quando configurei o espelhamento para o 2º banco de dados, não precisei configurar nada de novo. Apenas usou todas as informações existentes.

Se eu usar o botão "Failover" nas Propriedades do banco de dados, isso resultará em failover de todos os bancos de dados que usam esse ponto de extremidade ou apenas do banco de dados específico para o qual estou visualizando as propriedades?

sql-server sql-server-2005
  • 2 respostas
  • 2213 Views
Martin Hope
Rachel
Asked: 2013-05-09 06:47:39 +0800 CST

Como posso pesquisar o texto completo de um procedimento armazenado para um valor?

  • 5

Eu uso o script a seguir para pesquisar o texto de todos os procedimentos armazenados quando desejo encontrar valores específicos.

SELECT ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE @searchText
ORDER BY ROUTINE_NAME   

Eu descobri recentemente que ROUTINE_DEFINITIONpara após 4.000 caracteres, então alguns procedimentos não estavam sendo retornados quando deveriam.

Como posso consultar o texto completo de um procedimento armazenado para um valor?

sql-server sql-server-2005
  • 4 respostas
  • 13913 Views
Martin Hope
Rachel
Asked: 2013-04-24 07:35:48 +0800 CST

Posso copiar a estrutura de uma tabela #temp para uma nova tabela física?

  • 6

Eu tenho um #tempTableque foi criado usando

SELECT *
INTO #tempTable
FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'Excel 8.0;Database=MyFileName.xls', 
'SELECT * FROM [Sheet1$]')

Existe uma maneira fácil de copiar a estrutura da tabela #tempTablepara uma nova tabela física?

A tabela temporária contém muitas colunas que contêm números, datas, decimais e strings, e não quero ter que identificar e definir manualmente cada coluna.

Estou usando o SQL Server 2005

sql-server sql-server-2005
  • 2 respostas
  • 18529 Views
Martin Hope
Rachel
Asked: 2013-02-27 08:22:30 +0800 CST

Existe alguma diferença entre colocar um alias de coluna no início ou no final da definição da coluna?

  • 12

Eu sempre vi e escrevi meus apelidos de coluna como

SELECT 1 as ColumnName

mas hoje me deparei com uma consulta que usava

SELECT ColumnName = 1

Existe alguma diferença em como essas duas consultas são executadas? Ou existe um padrão entre os DBAs sobre qual usar?

Pessoalmente, acho que a segunda seria mais fácil de ler/manter para definições de coluna mais longas (bom exemplo aqui deste artigo ), no entanto, nunca vi a segunda sintaxe usada antes de hoje, então estou me perguntando se há algum motivo para não estar usando isso.

sql-server t-sql
  • 2 respostas
  • 2448 Views
Martin Hope
Rachel
Asked: 2013-02-19 05:50:00 +0800 CST

Posso iniciar um procedimento armazenado e retornar imediatamente sem esperar que ele termine?

  • 47

Temos um procedimento armazenado que os usuários podem executar manualmente para obter alguns números atualizados para um relatório que é usado constantemente ao longo do dia.

Eu tenho um segundo procedimento armazenado que deve ser executado após a execução do primeiro procedimento armazenado, pois é baseado nos números obtidos desse primeiro procedimento armazenado, no entanto, leva mais tempo para ser executado e é para um processo separado, portanto, não quero faça o usuário esperar enquanto este segundo procedimento armazenado é executado.

Existe uma maneira de fazer com que um procedimento armazenado inicie um segundo procedimento armazenado e retorne imediatamente sem esperar pelos resultados?

Estou usando o SQL Server 2005.

sql-server sql-server-2005
  • 5 respostas
  • 66271 Views
Martin Hope
Rachel
Asked: 2013-01-26 08:46:17 +0800 CST

Como posso corrigir "Não é possível executar um backup diferencial ... um backup de banco de dados atual não existe"?

  • 11

Recentemente, mudamos para o FULLmodelo de recuperação, com backups completos sendo feitos todo fim de semana e diferenciais sendo feitos todos os dias.

O problema é que os backups diferenciais nem sempre parecem funcionar. A mensagem de erro registrada no histórico do trabalho é

Executado como usuário: nome de usuário. ... 9.00.3042.00 para 32 bits Copyright (C) Microsoft Corp 1984-2005. Todos os direitos reservados.
Iniciado: 11:20:12 AM Progresso: 2013-01-25 11:20:13.90 Fonte: {450389BA-54C2-4892-9CD0-0126CA9B0ED8} Executando a consulta "DECLARE @Guid UNIQUEIDENTIFIER EXECUTE msdb..sp".: 100% complete End Progress Error: 2013-01-25 11:20:14.40 Code: 0xC002F210
Source: Back Up Database (Differential) Execute SQL Task
Description: Executando a query "BACKUP DATABASE [MyDatabase] TO DISK = N'E:\Database Backups \MyDatabase_backup_201301251120.diff' WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'MyDatabase_backup_20130125112014', SKIP, REWIND, NOUNLOAD, STATS = 10 " falhou com o seguinte erro:"Não é possível executar um backup diferencial para o banco de dados "MyDatabase", porque um backup do banco de dados atual não existe. Execute um backup completo do banco de dados reemitindo BACKUP DATABASE, omitindo a opção WITH DIFERENTIAL. BA... A execução do pacote fa... A etapa fracassado.

A tarefa de backup completo é sempre concluída com êxito e posso visualizá-la msdb.dbo.backupsetusando a consulta encontrada aqui , então sei que ela existe. E parece que após uma reinicialização, o backup diferencial é concluído com êxito até o próximo backup completo.

Aqui está uma olhada no histórico de trabalho que tenho:

1/16 - Backup completo - Sucesso
17/01 - Backup Diferencial - Sucesso
18/01 - Backup Diferencial - Sucesso
19/01 - Backup Diferencial - Sucesso
1/20 - Backup completo - Sucesso
21/01 - Backup Diferencial - Falha
21/01 - Backup Diferencial - Falha
1/22 - Backup Completo - Sucesso
1/22 - Backup Diferencial - Falha
22/01 - Reiniciar
23/01 - Backup Diferencial - Sucesso
23/01 - Reiniciar
24/01 - Backup Diferencial - Sucesso
25/01 - Backup completo - Sucesso
1/25 - Backup Diferencial - Falha

As reinicializações ocorreram devido a um erro não relacionado onde @@SERVERNAMEestava null, então adiei postar esta pergunta até descobrir se a correção do @@SERVERNAMEproblema foi corrigida, mas não resolveu e agora não tenho ideia por onde começar.

O que pode fazer com que o SQL Server não reconheça um backup completo de um banco de dados e como posso corrigi-lo?

Também não tenho certeza se isso está relacionado, mas os backups diferenciais parecem bastante grandes e estou me perguntando se eles estão executando o diferencial do backup completo do banco de dados feito no início (em 16/01) em vez do mais backup completo recente. Os backups completos são de cerca de 260 GB e os diferenciais de 23/01 a 24/01 são de 30 GB cada.

Os trabalhos foram configurados usando o SQL Server Maintenance Plan Wizard e estou usando o SQL Server 2005

O botão [View T-SQL] para o plano de manutenção retorna este código:

Backup completo:

BACKUP DATABASE [MyDatabase] 
TO DISK = N'E:\Database Backups\MyDatabase_backup_2013_01_25_140607_2543780.bak' 
WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10, 
    NAME = N'MyDatabase_backup_2013_01_25_140607_2523778'

Diferencial:

BACKUP DATABASE [MyDatabase] 
TO DISK = N'E:\Database Backups\MyDatabase_backup_2013_01_25_140537_4073936.diff' 
WITH DIFFERENTIAL, NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD,  STATS = 10, 
    NAME = N'MyDatabase_backup_2013_01_25_140537_4053934'

Isso está muito relacionado a outra pergunta que tenho , no entanto, foi sugerido no chat que eu postasse uma nova pergunta em vez de editar a outra devido às perguntas serem diferentes e às respostas existentes na outra pergunta.

sql-server sql-server-2005
  • 1 respostas
  • 13018 Views
Martin Hope
Rachel
Asked: 2013-01-22 06:43:59 +0800 CST

Posso redefinir manualmente o "sinalizador de status interno para um backup completo do banco de dados"?

  • 4

Recentemente, mudamos para o FULLmodelo de recuperação, com backups completos sendo feitos todo fim de semana e diferenciais sendo feitos todos os dias.

Isso funcionou no fim de semana passado, no entanto, neste fim de semana, o backup diferencial falhou dizendo que

Mensagem

Executado como usuário: nome de usuário. ... 9.00.3042.00 para 32 bits Copyright (C) Microsoft Corp 1984-2005. Todos os direitos reservados.
Iniciado: 12:30:00 AM
Progresso: 2013-01-21 00:30:01.69
Fonte: {450389BA-54C2-4892-9CD0-0126CA9B0ED8} Executando a consulta "DECLARE @Guid UNIQUEIDENTIFIER EXECUTE msdb..sp".: 100% complete
End Progress
Error: 2013-01-21 00:30:02.11 Code: 0xC002F210
Source: Back Up Database (Differential) Execute SQL Task
Description: Executando a consulta "BACKUP DATABASE [MyDatabase] TO DISK = N'E:\Database Backups \MyDatabase_backup_201301210030.bak' COM DIFERENCIAL , NOFORMAT, NOINIT, NAME = N'MyDatabase_backup_20130121003002', SKIP, REWIND, NOUNLOAD, STATS = 10 ""Não é possível executar um backup diferencial para o banco de dados "MyDatabase", porque um backup atual do banco de dados não existe. Execute um backup completo do banco de dados reemitindo BACKUP DATABASE, omitindo a opção WITH DIFERENTIAL. BAC... A execução do pacote fa... A etapa fracassado.

O trabalho que executa o backup completo do banco de dados foi executado com êxito e posso visualizar o backup usando a consulta encontrada aqui , portanto, não sei por que ele está me dizendo "não existe um backup atual do banco de dados".

Encontrei esta página do MSDN que sugere que a causa do problema é

Esse problema pode ocorrer quando o sinalizador de status interno para um backup completo do banco de dados não é redefinido após a criação do backup completo do banco de dados.

Não consigo instalar o hotfix imediatamente e fazer outro backup completo do banco de dados não é uma opção no momento, então tentei redefinir manualmente o sinalizador de status interno para um backup completo do banco de dados.

Existe uma maneira de redefinir manualmente esse sinalizador para que os diferenciais possam ser executados com sucesso pelo resto da semana? Ou para definir o backup básico para um backup completo existente que existe em msdb.dbo.BackupSet/ msdb.dbo.BackupMediaFamily?

Estou usando o SQL Server 2005

sql-server-2005 backup
  • 2 respostas
  • 1313 Views
Martin Hope
Rachel
Asked: 2013-01-15 11:25:10 +0800 CST

Posso usar WITH INIT para meu backup de log de transações para evitar que ele fique muito grande?

  • 4

Ainda estou lutando para entender as tarefas de backup do SQL.

Atualmente, temos uma instância do SQL Server 2005 usando o modelo de recuperação FULL.

Fazemos um backup completo do banco de dados toda semana.

BACKUP DATABASE [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase.Bak'
WITH INIT, NAME = N'MyDatabase.Bak'

E um backup diferencial uma vez ao dia

BACKUP DATABASE [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase_Diff.Bak'
WITH INIT, DIFFERENTIAL, NAME = N'MyDatabase_Diff.Bak'

Agora estou tentando descobrir como agendar backups de log de transações a cada hora, então, no máximo, perderíamos uma hora de trabalho.

BACKUP LOG [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase_Log.Bak'

Meu problema é que nosso espaço de armazenamento é limitado e não quero que o arquivo de log fique muito grande. Posso usar WITH INITno backup do log de transações para forçá-lo a criar um novo arquivo a cada hora? Ou preciso de todos os backups do log de transações desde o último backup diferencial para restaurar em um ponto específico no tempo durante o dia?

E se eu precisar manter todas as cópias desde o último diferencial, existe uma maneira de dizer para redefinir sempre que eu fizer um backup?

sql-server-2005 backup
  • 2 respostas
  • 8455 Views
Martin Hope
Rachel
Asked: 2012-12-19 10:58:47 +0800 CST

Como posso fazer backup de um grande banco de dados SQL Server sem afetar o desempenho?

  • 20

Recebemos relatórios de consultas sendo executadas lentamente ou expirando no início da manhã, e o único trabalho que vejo em execução que acho que poderia afetar isso é nosso trabalho de backup de banco de dados.

O banco de dados em si tem cerca de 300 GB e o trabalho de backup começa às 4h30 e termina pouco depois das 7h. A sintaxe atual do nosso trabalho de backup é:

BACKUP DATABASE [DatabaseName]
TO DISK = N'E:\Database Backups\DatabaseName.Bak'
WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak',
NOSKIP, STATS = 10, NOFORMAT

E:\é uma partição no servidor que contém os bancos de dados e os backups do banco de dados.

Também deve ser notado que este é um servidor virtual, não um servidor autônomo dedicado. Começamos a receber reclamações sobre lentidão durante o processo de backup logo após mudarmos para um servidor virtual, então acho que pode estar relacionado.

Existe uma maneira de executar esse trabalho de backup para que ele não afete o desempenho da consulta durante a execução?

Estamos usando o SQL Server 2005

sql-server sql-server-2005
  • 4 respostas
  • 42334 Views
Martin Hope
Rachel
Asked: 2012-12-07 05:43:50 +0800 CST

Como posso impedir que o SQL valide uma consulta OPENROWSET quando ela não será executada?

  • 2

Eu tenho um problema em que um procedimento armazenado está gerando um erro porque está tentando executar/validar uma OPENROWSETconsulta dentro dele que na verdade não precisa ser executada.

O procedimento armazenado que se parece com isto:

IF (@flagA = 1)
BEGIN
    INSERT INTO #tmpData(Column1, Column2, Column3)
    SELECT A, B, C
    FROM (
        SELECT *
        FROM OPENROWSET(
            'Microsoft.ACE.OLEDB.12.0', 
            'Text; HDR=Yes; Database=\\server\tmpFiles', 
            'SELECT * FROM FileA.txt')
    ) as T
END

IF (@flagB = 1)
BEGIN
    INSERT INTO #tmpData(Column1, Column2, Column3)
    SELECT D, E, F
    FROM (
        SELECT *
        FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 
        'Excel 8.0;Database=\\server\tmpFiles\FileB.xls', 
        'SELECT * FROM [Sheet$]')
    ) as T
END

IF (@flagC = 1)
BEGIN
    INSERT INTO #tmpData(Column1, Column2, Column3)
    SELECT G, H, I
    FROM (
        SELECT *
        FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 
        'Excel 8.0;Database=\\server\tmpFiles\FileC.xls', 
        'SELECT * FROM [Sheet1$]')
    ) as T
END

Observe que cada OPENROWSETum faz referência a um arquivo diferente, em um formato diferente, com nomes de colunas diferentes.

Meu problema é que se um dos arquivos não existir, ou existir no formato errado (como alguém carregando um FileB como FileC por engano), recebo um erro quando o procedimento tenta executar, mesmo que essa OPENROWSETconsulta nunca seja destinado a ser executado.

Por exemplo, se FileB não existir e você tentar executar o procedimento com @flagB = 0, ele lançará um erro dizendo que não pode encontrar o servidor vinculado paraFileB

Ou se um usuário carregar um FileBcomo um FileCpor engano e se corrigir removendo FileCdo formulário, ele lançará um erro dizendo que Cannot process the object "SELECT * FROM [Sheet1$]"na próxima vez que o procedimento for executado porque o FileC não terá uma planilha chamada Sheet1, mesmo que@flagC = 0

Como posso evitar que o SQL valide as OPENROWSETconsultas se não forem elas que estão sendo executadas?

sql-server sql-server-2005
  • 1 respostas
  • 1494 Views
Martin Hope
Rachel
Asked: 2012-11-27 09:13:39 +0800 CST

Posso consultar um arquivo delimitado por tabulações do SSMS?

  • 16

É possível consultar um arquivo delimitado por tabulações do Sql Server Management Studio para visualizar seus dados sem salvá-los em nenhum lugar?

Eu sei que você pode BULK INSERTa partir de um arquivo delimitado por tabulações usando algo como:

BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');

no entanto, isso requer que você conheça as colunas com antecedência e crie uma tabela para armazenar os dados.

Também sei que você pode consultar alguns outros tipos de arquivo, como CSV ou Excel, sem definir as colunas com antecedência usando OPENROWSETe os drivers do Excel, como:

-- Query CSV
SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Text;Database=\\Server\Folder\;HDR=Yes;', 
    'SELECT * FROM MyFile.csv')

-- Query Excel
SELECT *
FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 
    'Excel 8.0;Database=MyFile.xls', 
    'SELECT * FROM [Sheet1$]')

FormatAlém disso, se eu alterar a chave de registro HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Textde CSVDelimitedpara TabDelimitedno SQL Server, a consulta CSV acima lerá corretamente um arquivo de texto delimitado por tabulações; deixar assim.

Tentar usar Format=TabDelimitedno OPENROWSETtambém não funciona

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Text;Database=\\Server\Folder\;HDR=Yes;Format=TabDelimited', 
    'SELECT * FROM MyFile.txt')

Eu fiz algumas tentativas de copiar as Textchaves de registro das chaves Enginese ISAM Formatspara algo personalizado cujo padrão é TabDelimited, no entanto, ele ainda está lendo arquivos em CSVFormatvez de TabDelimitedformatar, então devo estar perdendo alguma coisa aqui.

Existe uma maneira de consultar um arquivo delimitado por tabulações para visualizar seu conteúdo sem precisar criar uma tabela e BULK INSERTfazer isso?

Estou usando o SQL Server 2005

sql-server-2005 csv
  • 2 respostas
  • 13795 Views
Martin Hope
Rachel
Asked: 2012-11-06 05:25:33 +0800 CST

Como posso obter o deslocamento correto entre o UTC e o horário local para uma data anterior ou posterior ao horário de verão?

  • 34

Atualmente, uso o seguinte para obter um datetime local de um datetime UTC:

SET @offset = DateDiff(minute, GetUTCDate(), GetDate())
SET @localDateTime = DateAdd(minute, @offset, @utcDateTime)

Meu problema é que, se o horário de verão ocorrer entre GetUTCDate()e @utcDateTime, @localDateTimeacaba sendo uma hora de folga.

Existe uma maneira fácil de converter de utc para hora local para uma data que não seja a data atual?

Estou usando o SQL Server 2005

sql-server sql-server-2005
  • 11 respostas
  • 213140 Views
Martin Hope
Rachel
Asked: 2012-10-20 11:37:55 +0800 CST

Existe uma maneira mais concisa de converter uma data e hora UTC apenas em uma data local?

  • 7

Estou tentando escrever uma consulta que agrupe registros com base na parte da data local apenas de um campo de data e hora UTC.

Por exemplo, se minha tabela contiver 10/19/2012 2:00:00, ela deverá ser agrupada como 10/18/2012, pois meu horário local é EST (-5h) e estou interessado apenas na parte de data do campo.

Sei que posso usar DateAdd(day, DateDiff(day, 0, MyDate), 0)para obter a parte da data apenas do campo datetime e posso usar DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)para converter uma data e hora UTC em uma data e hora local.

Mas combinar os dois está me ofendendo seriamente.

Existe uma maneira melhor do que essa de obter apenas a parte Date de um campo UTC DateTime, convertido em hora local, no SQL Server 2005?

  SELECT DateAdd(day, DateDiff(day, 0, DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)), 0)
       , Count(*)
    FROM MyTable
GROUP BY DateAdd(day, DateDiff(day, 0, DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)), 0)
sql-server sql-server-2005
  • 3 respostas
  • 21764 Views
Martin Hope
Rachel
Asked: 2012-10-20 09:23:02 +0800 CST

Existe uma maneira de unir cada linha da TabelaA a uma linha da TabelaB menor, repetindo a TabelaB quantas vezes forem necessárias?

  • 8

Desculpe pelo título confuso, eu não sabia o que escrever lá.

Eu tenho uma tabela de algumas centenas de registros. Eu preciso atribuir cada registro desta tabela a uma tabela dinâmica muito menor de usuários, e os usuários devem alternar quanto aos registros que recebem.

Por exemplo, se a Tabela A for

Row_Number () Id
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10

e a Tabela B é

Row_Number () Id
1 1
2 2
3 3

Eu preciso de um conjunto de resultados finais que seja

UserId RecordId
1 1
2 2
3 3
1 4
2 5
3 6
1 7
2 8
3 9
1 10

Consegui fazer algo um pouco confuso usando o operador mod, mas estava curioso para saber se essa mesma consulta poderia ser executada sem a tabela temporária e a variável.

A tabela temporária é usada porque TableA é, na verdade, uma função definida pelo usuário que converte uma string delimitada por vírgulas em uma tabela e preciso da contagem dos objetos da UDF.

-- Converts a comma-delimited string into a table
SELECT Num as [UserId], Row_Number() OVER (ORDER BY (SELECT 1)) as [RowNo]
INTO #tmpTest
FROM dbo.StringToNumSet('2,3,1', ',') 

DECLARE @test int
SELECT @test = Count(*) FROM #tmpTest

SELECT *
FROM #tmpTest as T1
INNER JOIN (
    SELECT Top 10 Id, Row_Number() OVER (ORDER BY SomeDateTime) as [RowNo]
    FROM TableA WITH (NOLOCK)
) as T2 ON T1.RowNo = (T2.RowNo % @test) + 1

É importante que os UserIds se alternem também. Não consigo atribuir o 1/3 superior dos registros ao User1, o segundo 1/3 dos registros ao User2 e o terceiro 1/3 dos registros ao User3.

Além disso, os UserIds precisam manter a ordem em que foram inseridos originalmente, por isso tenho um Row_Number() OVER (ORDER BY (SELECT 1))na tabela do usuário

Existe uma maneira de unir essas tabelas em uma única consulta para que não precise usar uma tabela e variável temporária?

Estou usando o SQL Server 2005

sql-server-2005 query-refactor
  • 2 respostas
  • 488 Views
Martin Hope
Rachel
Asked: 2012-09-14 05:56:13 +0800 CST

Por que usar um tipo de dados Real em uma equação matemática retorna um resultado incorreto?

  • 4

Eu estava tentando descobrir a origem do que parecia ser um erro de arredondamento hoje e descobri que uma das colunas usadas em uma equação matemática estava usando o tipo de dados real , e isso está fazendo com que minha equação retorne um valor incorreto.

Alguém pode me explicar porque

SELECT 776.2384 * cast(100 as real) / 100 

é igual 776.2385enquanto

SELECT 776.2384 * 100 / 100

igual 776.2384?

sql-server sql-server-2005
  • 1 respostas
  • 1308 Views
Martin Hope
Rachel
Asked: 2012-07-27 04:44:36 +0800 CST

Qual é a maneira mais eficiente de obter o mínimo de várias colunas no SQL Server 2005?

  • 29

Estou em uma situação em que quero obter o valor mínimo de 6 colunas.

Encontrei três maneiras até agora de fazer isso, mas tenho preocupações com o desempenho desses métodos e gostaria de saber qual seria melhor para o desempenho.

O primeiro método é usar uma instrução big case . Aqui está um exemplo com 3 colunas, baseado no exemplo do link acima. Minha declaração de caso seria muito mais longa, pois estarei olhando para 6 colunas.

Select Id,
       Case When Col1 <= Col2 And Col1 <= Col3 Then Col1
            When Col2 <= Col3 Then Col2 
            Else Col3
            End As TheMin
From   MyTable

A segunda opção é usar o UNIONoperador com várias instruções de seleção . Eu colocaria isso em uma UDF que aceita um parâmetro Id.

select Id, dbo.GetMinimumFromMyTable(Id)
from MyTable

e

select min(col)
from
(
    select col1 [col] from MyTable where Id = @id
    union all
    select col2 from MyTable where Id = @id
    union all
    select col3 from MyTable where Id = @id
) as t

E a 3ª opção que encontrei foi usar o operador UNPIVOT , que eu nem sabia que existia até agora

with cte (ID, Col1, Col2, Col3)
as
(
    select ID, Col1, Col2, Col3
    from TestTable
)
select cte.ID, Col1, Col2, Col3, TheMin from cte
join
(
    select
        ID, min(Amount) as TheMin
    from 
        cte 
        UNPIVOT (Amount for AmountCol in (Col1, Col2, Col3)) as unpvt
    group by ID
) as minValues
on cte.ID = minValues.ID

Devido ao tamanho da tabela e à frequência em que essa tabela é consultada e atualizada, estou preocupado com o impacto no desempenho que essas consultas teriam no banco de dados.

Esta consulta será realmente usada em uma junção a uma tabela com alguns milhões de registros, porém os registros retornados serão reduzidos para cerca de cem registros por vez. Ele será executado muitas vezes ao longo do dia, e as 6 colunas que estou consultando são atualizadas com frequência (elas contêm estatísticas diárias). Acho que não há índices nas 6 colunas que estou consultando.

Qual desses métodos é melhor para o desempenho ao tentar obter o mínimo de várias colunas? Ou existe outro método melhor que eu não conheço?

Estou usando o SQL Server 2005

Dados e resultados de amostra

Se meus dados contivessem registros como este:

Id Col1 Col2 Col3 Col4 Col5 Col6
1 3 4 0 2 1 5
2 2 6 10 5 7 9
3 1 1 2 3 4 5
4 9 5 4 6 8 9

O resultado final deve ser

Valor do código
1 0
2 2
3 1
4 4
sql-server sql-server-2005
  • 7 respostas
  • 56497 Views
Martin Hope
Rachel
Asked: 2012-07-20 07:03:37 +0800 CST

Como posso retirar caracteres não numéricos de uma string?

  • 14

Os usuários inserem um termo de pesquisa em uma caixa e esse valor é passado para um procedimento armazenado e verificado em alguns campos diferentes no banco de dados. Esses campos nem sempre são do mesmo tipo de dados.

Um campo (número de telefone) consiste em todos os números, portanto, ao verificar, ele remove todos os caracteres não numéricos da string usando uma função .Net CLR.

SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')

O problema é que esta função para de funcionar abruptamente de vez em quando com o seguinte erro:

Msg 6533, Nível 16, Estado 49, Linha 2
AppDomain MyDBName.dbo[runtime].1575 foi descarregado pela política de escalação para garantir a
consistência de sua aplicação. Falta de memória ocorreu ao acessar um recurso crítico.
System.Threading.ThreadAbortException: Exceção do tipo
'System.Threading.ThreadAbortException' foi lançado.
System.Threading.ThreadAbortException:

Eu tentei as sugestões postadas no MSDN para esse erro, mas ainda estou recebendo o problema. Neste momento, mudar para um servidor de 64 bits não é uma opção para nós.

Eu sei que reiniciar o servidor libera qualquer memória que ele tenha, mas essa não é uma solução viável em um ambiente de produção.

Existe uma maneira de remover caracteres não numéricos de uma string no SQL Server 2005 usando apenas T-SQL?

sql-server sql-server-2005
  • 3 respostas
  • 93406 Views
Martin Hope
Rachel
Asked: 2012-06-19 10:26:29 +0800 CST

Existe uma maneira de configurar um usuário para executar SPs, mas não acessar as tabelas de dados subjacentes?

  • 6

Temos duas instâncias de banco de dados em duas caixas de servidor separadas que estão vinculadas. O usuário do site precisa ser capaz de executar procedimentos armazenados no Banco de DadosA que consultam as tabelas do Banco de DadosB, no entanto, não deve ser capaz de ler diretamente das tabelas no Banco de DadosB.

Isso é possível no Sql Server 2005?

Simplesmente criar um procedimento armazenado e dar ao usuário da web permissões para executá-lo retorna um erro deAccess to the remote server is denied because no login-mapping exists.

Eu realmente não quero dar à conta de usuário do site acesso gratuito às tabelas DatabaseB.

Atualizar

A sugestão de uso de Aaron EXECUTE AS OWNERnão funciona porque Ownernão tem acesso ao DatabaseB.

Usar EXECUTE AS 'UserWithPermissions'retorna um erro de Access to the remote server is denied because the current security context is not trusted. A pesquisa on-line me leva a acreditar que isso ocorre porque o banco de dados não está marcado como TRUSTWORTHY , portanto, o banco de dados remoto rejeita a conexão. Suspeito que funcionaria bem se as duas instâncias do banco de dados estivessem no mesmo servidor.

Eu não queria definir o banco de dados da web, TRUSTWORTHYjá que parte da segurança é mais relaxada, então fui com a outra opção de Aaron: criar um usuário DatabaseBque tenha acesso apenas a algumas visualizações específicas contendo os dados que o site deve acessar, em seguida, vá para Propriedades de segurança no objeto Servidor vinculado e configure o usuário do site para fazer login como o novo usuário limitado ao acessar o servidor vinculado.

Isso permitiu que o usuário do meu site tivesse acesso limitado a dados específicos no banco de dados privado, sem dar acesso a nenhuma das tabelas subjacentes.

sql-server-2005 stored-procedures
  • 2 respostas
  • 1360 Views
Martin Hope
Rachel
Asked: 2012-05-17 05:00:58 +0800 CST

Existe alguma diferença significativa entre Month(date) e DatePart(month, date)?

  • 6

O MSDN afirma que ambos Month(date)e DatePart(month, date)retornam exatamente o mesmo valor, no entanto, há alguma diferença entre os dois métodos, desempenho ou não?

Estou criando algumas consultas que agregam grandes conjuntos de dados com base no mês e, às vezes, demoram um pouco para serem executadas, então gostaria de ter certeza de que estou usando a sintaxe mais eficiente possível.

Atualmente estou usando o SQL Server 2005

sql-server sql-server-2005
  • 2 respostas
  • 4060 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
subwaysurfers
my femboy roommate

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve