Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Versões Anteriores


João Paulo Taraciuk

Pergunta

Ola

Gostaria de saber se alguém conhece no SQL Server algum comando que faça algo parecido com o que ocorre para o CSS no IE, ou seja, coloca-se as tags <!-- ... > para que se for uma versão anterior do IE, ignore esse código, ou não "enxergue".

Quero fazer um tratamento para chave simetrica no SQL Server, porém, para versões anteriores ao 2005 esse complemento não existe, pretendo criar uma procedure que verifique a versão, e, caso seja a versão do banco posterior ao 8.00, execute os procedimentos de encriptação e decriptação da chave.

Estou tentando utilizar um ELSE, mas, ao tentar rodar a procedure, quando chega no else que abre a chave, ele apresenta erro de que esse código não é reconhecido.

Então, se tivesse algum comando que fizesse o SQL Server ignorar essa parte caso seja o 8.00 seria excelente, porque assim, posso utilizar a mesma procedure em qualquer versão do SQL Server.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Bom dia João,

Qual o complemento q está utilizando que não existe nas versões anteriores do 2005?

O que pode fazer é gerar o script dinamicamente. O problema é que se o script for grande, fica muito ruim a implementação (complicado).

Ex.:

DECLARE @SQL VARCHAR(100)
SET @SQL = ('SELECT getdate()')
EXEC (@SQL)

Link para o comentário
Compartilhar em outros sites

  • 0

Então o que estou tentando fazer algo parecido com isso:

CREATE PROCEDURE [dbo].[VERSAO_MSSQL]( @Codigo   VARCHAR(10) )          
as         
BEGIN          
          
 declare           
  @VersaoSQL   VARCHAR(4) 

 SELECT @VersaoSQL = CAST(SERVERPROPERTY('productversion') AS VARCHAR)          
           
  IF @VersaoSQL = '8.00'           
  BEGIN          
    SELECT Nome, Senha 
    FROM MinhaTabela
    WHERE Codigo = @Codigo
  END          
  ELSE          
  BEGIN          
            
    OPEN SYMMETRIC KEY MinhaChave DECRYPTION BY CERTIFICATE ChaveSimetrica          
             
    SELECT Nome, convert(VARBINARY(300), decryptbykey(Senha)) as Senha  
    FROM MinhaTabela      
    WHERE Codigo = @Codigo        
       
  END 
  
  END

Aí, ao rodar no SQL Server 2000, por exemplo, ele não reconhece a parte da chave, não deixa nem criar.

Seria excelente se existisse alguma tag, que ele simplesmente ignorasse a parte do ELSE caso fosse versão 8.00 ou inferior

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta fazer esta forma:

CREATE PROCEDURE [dbo].[VERSAO_MSSQL]( @Codigo   VARCHAR(10) )          
as         
BEGIN          
          
declare           
  @VersaoSQL   VARCHAR(4),
  @SQL   VARCHAR(1500)  

SELECT @VersaoSQL = CAST(SERVERPROPERTY('productversion') AS VARCHAR)          

  IF @VersaoSQL = '8.00'           
  BEGIN          
    SELECT Nome, Senha 
    FROM MinhaTabela
    WHERE Codigo = @Codigo
  END          
  ELSE          
  BEGIN          
    Set @SQL = 'OPEN SYMMETRIC KEY MinhaChave DECRYPTION BY CERTIFICATE ChaveSimetrica; ' +
    'SELECT Nome, convert(VARBINARY(300), decryptbykey(Senha)) as Senha ' +
    'FROM MinhaTabela ' +
    'WHERE Codigo = @Codigo'
    EXEC (@SQL)
  END 
  
END

Link para o comentário
Compartilhar em outros sites

  • 0

Ele apresenta um erro quando chamo a procedure:

Must declare the scalar variable "@Codigo"

imagino que seja devido à variável que está dentro da string que ele não está reconhecendo.

Mas essa variável está vindo como parâmetro na chamada da procedure, se eu coloco mais variáveis dentro da procedure declarando-as normalmente e chamando dentro da string que está indo para o SQL, ocorre o mesmo problema.

Editado por João Paulo Taraciuk
Link para o comentário
Compartilhar em outros sites

  • 0

Deu certo aqui, no caso de ser uma variável para comparação, coloquei da seguinte forma:

Set @SQL = 'OPEN SYMMETRIC KEY MinhaChave DECRYPTION BY CERTIFICATE ChaveSimetrica; ' +
    'SELECT Nome, convert(VARBINARY(300), decryptbykey(Senha)) as Senha ' +
    'FROM MinhaTabela ' +
    'WHERE Codigo = ' +@Codigo
    EXEC (@SQL)

Obrigado pela ajuda fulvio.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde João,

Não percebi que havia uma variável dentro da string de execução. É isto aí que fez.

OBS.: Caso a variável seja inteira, dará erro pois o sql identificará a sintaxe "+" como sendo uma adição. Aí é só utilizar o CAST para converter pra VARCHAR. Aí irá funcionar.

De nada. Precisando estamos aí. :.)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...