caioamante Posted October 7, 2011 Report Share Posted October 7, 2011 (edited) 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? Edited October 18, 2011 by caioamante Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted October 7, 2011 Report Share Posted October 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. Quote Link to comment Share on other sites More sharing options...
0 caioamante Posted October 8, 2011 Author Report Share Posted October 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; Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted October 10, 2011 Report Share Posted October 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) Quote Link to comment Share on other sites More sharing options...
0 caioamante Posted October 10, 2011 Author Report Share Posted October 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] Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted October 10, 2011 Report Share Posted October 10, 2011 Boa tarde Caio, Dê uma olhada no link:http://support.microsoft.com/kb/942656/pt Quote Link to comment Share on other sites More sharing options...
0 caioamante Posted October 13, 2011 Author Report Share Posted October 13, 2011 O meu sql server é 0 2008 será que não da problema eu baixar isso que é para 2005 Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted October 14, 2011 Report Share Posted October 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) Quote Link to comment Share on other sites More sharing options...
0 caioamante Posted October 18, 2011 Author Report Share Posted October 18, 2011 Parceiro.Muito obrigado deu certinho o select trouxe o que eu queria e então mudei para exec.Agradeço muito. Quote Link to comment Share on other sites More sharing options...
Question
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?
Edited by caioamanteLink to comment
Share on other sites
8 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.