Usuário com melhor resposta
Erro em declaração de variável local

Pergunta
-
Olá amigos, estou com um problema que parece ser um tanto simples, mas que está me custando algum tempo para resolver:
Tenho essa procedure de exemplo do AdventureWorks:
CREATE PROC HumanResources.AddDepartment
@Name nvarchar(50), @GroupName nvarchar(50),
@DeptID smallint OUTPUT
AS
INSERT INTO HumanResources.Department (Name, GroupName)
VALUES (@Name, @GroupName)
SET @DeptID = SCOPE_IDENTITY()
Para eu passar o parâmetro de saída:
DECLARE @dept int
EXEC AddDepartment 'Refunds', '', @dept OUTPUT
SELECT @dept
Mas aparece que a variável não está declarada. Já tentei declarar outras variáveis mas não dá de jeito nenhum.
Agradeço qualquer ajuda desde já.
Respostas
-
Olá Gabriel,
Se você executar esse código, do jeito que está aqui, ele funciona:
Code SnippetCREATE PROC HumanResources.AddDepartment
@Name nvarchar(50), @GroupName nvarchar(50),
@DeptID smallint OUTPUT
AS
INSERT
INTO HumanResources.Department (Name, GroupName)VALUES
(@Name, @GroupName)SET
@DeptID = SCOPE_IDENTITY()GO
DECLARE
@dept intEXEC
HumanResources.AddDepartment 'aaaa', '', @dept OUTPUTSELECT
@deptAbraços
Todas as Respostas
-
-
Boa Tarde Gabriel Olivério,
Seja bem vindo ao fórum de SQL Server no MSDN.
Nós participantes do fórum tentaremos ajudá-los em suas dúvidas e problemas de SQL Server através do nosso conhecimento, experiência e disponibilidade.
Não vi nenhum na sua construção. Inclusive fiz um teste e consegui recuperar o valor do parâmetro de retorno. Sugiro verificar senão há nenhum tratamento de erro (Try Catch) ou a nomeclatura dos objetos que esteja "ocultando" o problema.
O seguinte script funcionou:
Code SnippetCREATE
SCHEMA HumanResourcesGO
CREATE
TABLE HumanResources.Department (DeptID INT IDENTITY(1,1), Name VARCHAR(20), GROUPNAME VARCHAR(20))GO
CREATE
PROC HumanResources.AddDepartment@Name
@DeptID
smallint OUTPUTAS
INSERT
INTO HumanResources.Department (Name, GroupName)VALUES
(@Name, @GroupName)SET
@DeptID = SCOPE_IDENTITY()GO
DECLARE
@dept intEXEC
HumanResources.AddDepartment 'Refunds 1', '', @dept OUTPUTSELECT
@deptEXEC
HumanResources.AddDepartment 'Refunds 2', '', @dept OUTPUTSELECT
@deptEXEC
HumanResources.AddDepartment 'Refunds 3', '', @dept OUTPUTSELECT
@deptdrop
table HumanResources.Departmentdrop
procedure HumanResources.AddDepartmentdrop
schema HumanResources[ ]s,
Gustavo
http://gustavomaiaaguiar.spaces.live.com -
-
Gabriel,
Primeiramente, seja bem vindo ao fórum, esperamos poder ajudar da melhor forma possível, de acordo com a nossa disponibilidade e conhecimento. Faça parte desta grande comunidade, contribua com suas dúvidas, informações, dicas, nos ajudando a tornar o fórum uma grande fonte de aprendizagem.
Em relação ao código da sua Stored Procedure, também não consegui identificar algo de errado, a única coisa que percebi foi que você esta executando a stored procedure sem informar o nome do esquema, mas isso a principio não deverá ocasionar falha no retorno do valor para a variável.
-
-
-
Olá Gabriel,
No formato que você postou de criação e execução dá erro sim. No entanto, tenta assim:
CREATE
PROC HumanResources.AddDepartment@Name
nvarchar(50), @GroupName nvarchar(50),@DeptID
smallint OUTPUTAS
INSERT
INTO HumanResources.Department (Name, GroupName)VALUES
(@Name, @GroupName)SET
@DeptID = SCOPE_IDENTITY()GO
DECLARE
@dept intEXEC
HumanResources.AddDepartment 'aaaa', '', @dept OUTPUTSELECT
@deptAbraços
-
Olá Demétrio Silva, como havia dito no post anterior, o problema está sobretudo na declaração da variável local. Quando eu declaro a variável, não dá erro, mas quando eu tento passar um valor para ela, diz que ela não está declarada.
Tem alguma explicação para isso?? O código anterior eu copiei e colei de uma apostila do curso para certificação 70-431, o único problema é que não tem o schema declarado, mas não daria problema na variável né... -
-
Fabiano, eu executei com o schema, dá erro, diz que a variável não está declarada. Eu executei a procedure sem parâmetro antes e funcionou, porque não tinha que passar o parâmetro de saída pra variável que eu declarei (@dept). Quando coloquei o parâmetro de saída, a procedure não deixou de ser compilada, mas não executa devido a variável @dept não está declarada.
Só que eu declaro a variável e a declaração não dá erro. Só na execução da procedure. Não consigo sequer passar um valor qualquer pra ela.
Espero ter sido masi claro dessa vez, e desculpe alguma coisa.
Obrigado -
Olá Gabriel,
Se você executar esse código, do jeito que está aqui, ele funciona:
Code SnippetCREATE PROC HumanResources.AddDepartment
@Name nvarchar(50), @GroupName nvarchar(50),
@DeptID smallint OUTPUT
AS
INSERT
INTO HumanResources.Department (Name, GroupName)VALUES
(@Name, @GroupName)SET
@DeptID = SCOPE_IDENTITY()GO
DECLARE
@dept intEXEC
HumanResources.AddDepartment 'aaaa', '', @dept OUTPUTSELECT
@deptAbraços
-
Olá Demétrio, copiei o código, mudei o contexto pra database AdventureWorks, dropei a a procedure antiga e executei. Ele cria e executa, mas não mostra a variável de saída como de costume, dá erro que a variável @dept não está declarada. Mas não tem problema não. Tentarei solucioná-la depois.
Agradeço a todos o empenho em me ajudar.
Abraços.