caioamante Postado Outubro 7, 2011 Denunciar Share Postado Outubro 7, 2011 (editado) Boa tarde a todos!Estou iniciando com o Sql Server e preciso fazer uma procedure que trabalhe da seguinte forma:Pega uma variavel e insira a informação de um campo.Ex:V_Variavel select campo_com_valor from tabelaEu quero inserir o valor do campo com valor dentro da v_variavel e criar a procedure.Sempre vai retornar 1 unico campo e uma unica linha.alguém pode me ajudar? Editado Outubro 18, 2011 por caioamante Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Outubro 7, 2011 Denunciar Share Postado Outubro 7, 2011 Boa tarde Caio, Declare @V_Variavel int Set @V_Variavel = (select campo_com_valor from tabela) O retorno do select tem q ser 1 valor apenas, pois o mesmo será atribuido à variável. Se o retorno do select for mais de 1 valor, dará erro. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 caioamante Postado Outubro 8, 2011 Autor Denunciar Share Postado Outubro 8, 2011 Boa tarde Caio, Declare @V_Variavel int Set @V_Variavel = (select campo_com_valor from tabela) O retorno do select tem q ser 1 valor apenas, pois o mesmo será atribuido à variável. Se o retorno do select for mais de 1 valor, dará erro.Amigo, obrigado mesmo pelo retorno.Minha idéia é a seguinte:Pegar essa variavel e colocar numa procedure que me traz o spid problematico e em seguida matar o spid, hoje faço esse processo manualmente, rodo o select e depois faço o kill na mão.CREATE PROCEDURE SP_ELIMINA_BLOCK ASDeclare @v_spid intSet @v_spid = SELECT spidFROM MASTER.DBO.SYSPROCESSES BLOCKINGWHERE BLOCKING.BLOCKED = 0 AND EXISTS (SELECT 1 FROM MASTER.DBO.SYSPROCESSES BLOCKED WHERE BLOCKED.BLOCKED = BLOCKING.SPID ); KILL @V_SPID; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Outubro 10, 2011 Denunciar Share Postado Outubro 10, 2011 Bom dia Caio, Ok, entendido. Mas você não pode matar o processo utilizando uma variável. A sintaxe do sql, após o KILL espera-se um inteiro. Mesmo que a variável contenha um inteiro, o sql não consegue interpretar. Tente fazer desta forma:CREATE PROCEDURE SP_ELIMINA_BLOCK AS Declare @v_spid INT DECLARE @Sql VARCHAR(100) Set @v_spid = SELECT spid FROM MASTER.DBO.SYSPROCESSES BLOCKING WHERE BLOCKING.BLOCKED = 0 AND EXISTS (SELECT 1 FROM MASTER.DBO.SYSPROCESSES BLOCKED WHERE BLOCKED.BLOCKED = BLOCKING.SPID ); Set @Sql = 'KILL ' + cast(@V_SPID AS VARCHAR) EXEC (@Sql) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 caioamante Postado Outubro 10, 2011 Autor Denunciar Share Postado Outubro 10, 2011 Bom dia Caio, Ok, entendido. Mas você não pode matar o processo utilizando uma variável. A sintaxe do sql, após o KILL espera-se um inteiro. Mesmo que a variável contenha um inteiro, o sql não consegue interpretar. Tente fazer desta forma:CREATE PROCEDURE SP_ELIMINA_BLOCK AS Declare @v_spid INT DECLARE @Sql VARCHAR(100) Set @v_spid = SELECT spid FROM MASTER.DBO.SYSPROCESSES BLOCKING WHERE BLOCKING.BLOCKED = 0 AND EXISTS (SELECT 1 FROM MASTER.DBO.SYSPROCESSES BLOCKED WHERE BLOCKED.BLOCKED = BLOCKING.SPID ); Set @Sql = 'KILL ' + cast(@V_SPID AS VARCHAR) EXEC (@Sql)Parceiro.. tentei conforme me explicou mas apresenta problemas também:> Linhas do script: 9-11 ----------------------- SET @SQL = 'KILL ' + CAST(@V_SPID AS VARCHAR) EXEC (@SQL) >[Erro] Linhas do script: 9-11 ---------------------- Must declare the scalar variable "@V_SPID". Msg: 137, Nível: 15, Estado: 2, Procedimento: , Linha: 2 >[Erro] Linhas do script: 9-11 ---------------------- Must declare the scalar variable "@SQL". Msg: 137, Nível: 15, Estado: 2, Procedimento: , Linha: 2 [Executado: 10/10/11 11h39min21s GMT-03:00] [Execução: 1/ms] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Outubro 10, 2011 Denunciar Share Postado Outubro 10, 2011 Boa tarde Caio, Dê uma olhada no link:http://support.microsoft.com/kb/942656/pt Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 caioamante Postado Outubro 13, 2011 Autor Denunciar Share Postado Outubro 13, 2011 O meu sql server é 0 2008 será que não da problema eu baixar isso que é para 2005 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Outubro 14, 2011 Denunciar Share Postado Outubro 14, 2011 Bom dia Caio, Para o sql 2008 não. No seu script, acrescentei um () q estava faltando. Alterei o EXEC para select. "Force" uma axecução para testes. Copie o resultado do select e execute no console. Olha se dá certo....CREATE PROCEDURE SP_ELIMINA_BLOCK AS Declare @v_spid INT DECLARE @Sql VARCHAR(100) Set @v_spid = (SELECT spid FROM MASTER.DBO.SYSPROCESSES BLOCKING WHERE BLOCKING.BLOCKED = 0 AND EXISTS (SELECT 1 FROM MASTER.DBO.SYSPROCESSES BLOCKED WHERE BLOCKED.BLOCKED = BLOCKING.SPID )); Set @Sql = 'KILL ' + cast(@V_SPID AS VARCHAR) select (@Sql) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 caioamante Postado Outubro 18, 2011 Autor Denunciar Share Postado Outubro 18, 2011 Parceiro.Muito obrigado deu certinho o select trouxe o que eu queria e então mudei para exec.Agradeço muito. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
caioamante
Boa tarde a todos!
Estou iniciando com o Sql Server e preciso fazer uma procedure que trabalhe da seguinte forma:
Pega uma variavel e insira a informação de um campo.
Ex:
V_Variavel
select campo_com_valor from tabela
Eu quero inserir o valor do campo com valor dentro da v_variavel e criar a procedure.
Sempre vai retornar 1 unico campo e uma unica linha.
alguém pode me ajudar?
Editado por caioamanteLink para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
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.