Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
teCa
Member

Откуда: Москва
Сообщений: 1035
Сабж. Есть приложение, которые вызывает на сервере хранимую процедуру при логине пользователя, передавая в неё несколько параметров.

По тех. документации приложения, если эта процедура вернет ok=1 авторизация одобрена, если ok=0 - приложение отклонит авторизацию.

Выглядит эта процедура так:

USE [db]
GO
/****** Object:  StoredProcedure [dbo].[login]    Script Date: 12/19/2012 16:56:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[login]
@uid int,
@ip varchar(15),
@hkey varchar(16)
AS
SELECT pay_stat AS ok FROM user_account WITH (nolock) WHERE uid = @uid


Те, если pay_stat юзера = 1, он войдет в систему, если 0, то нет. Эта часть работает, манипуляции с полем pay_stat, дают результаты.

Но если я пытаюсь добавить простую проверку, например:
USE [db]
GO
/****** Object:  StoredProcedure [dbo].[login]    Script Date: 12/19/2012 16:56:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[login]
@uid int,
@ip varchar(15),
@hkey varchar(16),
@lock_hkey varchar(16)
AS
SELECT @lock_hkey = hkey AS ok FROM user_account WITH (nolock) WHERE uid = @uid
if (@lock_hkey<>@hkey)
begin
SELECT 0 AS ok
end
else
begin
SELECT 1 AS ok
end


Вот уже в таком виде, процедура перестает вообще, хоть что-то делать. Хотя отдельно в QA, результат получаю такой, как нужно.
Посоветуйте что нибудь плз.
19 дек 12, 17:12    [13655605]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
teCa,

Наверное, в тех.документации приложения описаны и входные параметры процедуры? @lock_hkey среди них значится?
19 дек 12, 17:19    [13655637]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
teCa
Member

Откуда: Москва
Сообщений: 1035
Действительно, в силу своего незнания, я объявил её таким образом.
delcare после AS дебагер не пропустил =(
19 дек 12, 17:24    [13655681]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
hpv
Member

Откуда:
Сообщений: 153
teCa,

Опишите, что значит не работает, ошибку выдает, либо результат не равен ожидаемому и т.д.

SELECT @lock_hkey = hkey AS ok FROM user_account WITH (nolock) WHERE uid = @uid

Заменить как вариант на
DECLARE @lock_hkey varchar(16) = (SELECT hkey AS ok FROM user_account WITH (nolock) WHERE uid = @uid)


И убрать из параметров, вообще не понятно зачем эта переменная в параметрах
19 дек 12, 17:26    [13655691]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
hpv
Member

Откуда:
Сообщений: 153
teCa
Действительно, в силу своего незнания, я объявил её таким образом.
delcare после AS дебагер не пропустил =(


Не пропустил, потому что вы не обернули тело процедуры в begin/end
19 дек 12, 17:27    [13655702]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
teCa
Member

Откуда: Москва
Сообщений: 1035
hpv
teCa,

Опишите, что значит не работает, ошибку выдает, либо результат не равен ожидаемому и т.д.

SELECT @lock_hkey = hkey AS ok FROM user_account WITH (nolock) WHERE uid = @uid

Заменить как вариант на
DECLARE @lock_hkey varchar(16) = (SELECT hkey AS ok FROM user_account WITH (nolock) WHERE uid = @uid)


И убрать из параметров, вообще не понятно зачем эта переменная в параметрах


Суть в том, что приложение мне передает клиентский ключ. Далее, я должен получить этот ключ из таблички, сравнить его с текущим, если они равны - впустить, если нет - не пускать.

Подскажите синтаксис declare в рамках процедуры?
19 дек 12, 17:28    [13655710]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
hpv
Member

Откуда:
Сообщений: 153
ALTER PROCEDURE [dbo].[login]
@uid int,
@ip varchar(15),
@hkey varchar(16),
AS
BEGIN
DECLARE @lock_hkey varchar(16) = (SELECT hkey FROM user_account WITH (nolock) WHERE uid = @uid)

if (@lock_hkey <> @hkey)
begin
SELECT 0 AS ok
end
else
begin
SELECT 1 AS ok
end

END


Как-то так
19 дек 12, 17:33    [13655741]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
teCa
Member

Откуда: Москва
Сообщений: 1035
hpv
teCa
Действительно, в силу своего незнания, я объявил её таким образом.
delcare после AS дебагер не пропустил =(


Не пропустил, потому что вы не обернули тело процедуры в begin/end


А какую часть именно требуются обертывать?

USE [db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[login]
@uid int,
@ip varchar(15),
@hkey varchar(16),
AS
        DECLARE @lock_hkey varchar(16) = (SELECT hkey FROM dbo.account_lock WITH (nolock) WHERE uid = @uid)
	if (@lock_hkey<>@hkey)
	begin
	SELECT 0 AS ok
	end
	else
	begin
	SELECT 1 AS ok
	end


Сейчас дебаг не проходит, ругается на AS

автор
Сообщение 156, уровень 15, состояние 1, процедура auth_login, строка 5
Неправильный синтаксис около ключевого слова "AS".
19 дек 12, 17:36    [13655758]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
teCa
Member

Откуда: Москва
Сообщений: 1035
hpv
ALTER PROCEDURE [dbo].[login]
@uid int,
@ip varchar(15),
@hkey varchar(16),
AS
BEGIN
DECLARE @lock_hkey varchar(16) = (SELECT hkey FROM user_account WITH (nolock) WHERE uid = @uid)

if (@lock_hkey <> @hkey)
begin
SELECT 0 AS ok
end
else
begin
SELECT 1 AS ok
end

END


Как-то так


автор
Сообщение 156, уровень 15, состояние 1, процедура auth_login, строка 5
Неправильный синтаксис около ключевого слова "AS".
19 дек 12, 17:38    [13655767]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
teCa
Member

Откуда: Москва
Сообщений: 1035
teCa
hpv
ALTER PROCEDURE [dbo].[login]
@uid int,
@ip varchar(15),
@hkey varchar(16),
AS
BEGIN
DECLARE @lock_hkey varchar(16) = (SELECT hkey FROM user_account WITH (nolock) WHERE uid = @uid)

if (@lock_hkey <> @hkey)
begin
SELECT 0 AS ok
end
else
begin
SELECT 1 AS ok
end

END


Как-то так


автор
Сообщение 156, уровень 15, состояние 1, процедура auth_login, строка 5
Неправильный синтаксис около ключевого слова "AS".


Все понял, лишняя запятая.
19 дек 12, 17:39    [13655778]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
teCa
Member

Откуда: Москва
Сообщений: 1035
Один фиг не работает =(

Написал простую процедуру, которая запишет поступившие параметры.

USE [ldb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[auth_login]
@uid int,
@ip varchar(15),
@hkey varchar(16)
AS
begin
insert into db.dbo.account_lock (uid,hkey,lock) values (@uid,@hkey,1)
end


В результате, ничего в таблицу account_lock не попадает. Как можно узнать, запускалась ли процедура и каков результат её работы?
19 дек 12, 20:30    [13656448]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
_djХомяГ
Guest
А как и откуда процедуру запускаете
19 дек 12, 22:10    [13656682]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
_djХомяГ
Guest
смотрите профайлером - настриваете соотв события и смотрите что происходит в момент вызова
19 дек 12, 22:12    [13656683]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли просматривать историю выполнения хранимых процедур в 2008R2?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
hpv
teCa
Действительно, в силу своего незнания, я объявил её таким образом.
delcare после AS дебагер не пропустил =(


Не пропустил, потому что вы не обернули тело процедуры в begin/end

Занудства ради, begin/end для тела процедуры не являются обязательными:
create proc ppp @a int
as
    declare @b int;
    set @b = 1;
    select @a + @b;
go
exec ppp @a = 3;
go
drop proc ppp;
go
20 дек 12, 09:33    [13657805]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить