Debuger в SQL Analyzer
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Debuger в SQL Analyzer Expand / Collapse
Автор
Сообщение
28.03.2006 2:23
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 15.06.2006 1:29
Сообщ.: 12, Visits: 143
Запускаю debug по правой кнопке, задаю параметр (в данном случает тип datetime и получаю

[Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification

там кастить то собственно говоря нечего
Если я забиваю параметр жестко в процедуре то опять же вместо прохода по шагам все пролетает как обычный exec
Работаю от имени dbo
Подскажите где грабли. Спасибо
Сообщ. #893799
28.03.2006 3:55


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.10.2007 19:07
Сообщ.: 292, Visits: 3 426
Чтоб понять надоть, как говорил Якубович в передаче "Поле чудес" -
КОД В СТУДИЮ !
Сообщ. #893801
28.03.2006 17:32
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 15.06.2006 1:29
Сообщ.: 12, Visits: 143
Ну что же, как говорил более известный герой "Вот оно, дерево!" Здесь вариант когда параметр преврашен просто в переменую

CREATE proc spFinalizeOffShoreBalance
--@balancedate as datetime
As
Declare @balancedate as datetime
select @balancedate= getdate()

DECLARE @return_value int
,@res int
,@id int
,@fundid varchar(10)
,@holderid varchar(10)
,@acctid varchar(10)
,@marketvalue money
,@redemption money


DECLARE c CURSOR SCROLL STATIC
FOR SELECT
id
,fundid
,holderid
,acctid
,marketvalue
,redemption
FROM tbOffShoreUpload

OPEN c
fetch next from c into
@id
,@fundid
,@holderid
,@acctid
,@marketvalue
,@redemption

while @@FETCH_STATUS = 0
begin

EXEC @return_value = [dbo].[spFinalizeBalance]
@CitcoAcctId = @acctid,
@CitcoHolderId = @holderid,
@CitcoFundId = @fundid,
@finalDate = @balancedate,
@balanceAmount = @marketvalue,
@redemptionAmount = @redemption,
@res = @res OUTPUT

print 'result from spFinalizeBalance '+ convert(nvarchar,@res)
if @res=0
delete from tbOffShoreUpload
where id = @id

fetch next from c into
@id
,@fundid
,@holderid
,@acctid
,@marketvalue
,@redemption

end

На всякий случай вот что она вызывает, тоже кстати отлаживал через принты

ALTER proc [dbo].[spFinalizeBalance]
@CitcoAcctId varchar(10)
,@CitcoHolderId varchar(10) = null
,@CitcoFundId varchar(10) = null
,@finalDate datetime
,@balanceAmount money
,@redemptionAmount money = null
,@res int OUTPUT
as
/*
declare @CitcoAcctId varchar(10)
declare @finalDate datetime
declare @balanceAmount money
declare @redemptionAmount money
*/

declare @balanceRecordId bigint
declare @redemptionRecordId bigint
declare @accountId bigint
/*
set @CitcoAcctId='BASM0200'
set @finalDate = cast('02/28/2006' as datetime)
set @balanceAmount = 1100
set @redemptionAmount = 102
*/
print '@CitcoAcctId='+@CitcoAcctId
print '@finalDate='+convert(nvarchar,@finalDate)
print '@balanceAmount='+convert(nvarchar,@balanceAmount)
print '@redemptionAmount='+ convert(nvarchar,@redemptionAmount)


if isnull(@CitcoHolderId,'-1')<>'-1' and isnull(@CitcoFundId,'-1')<>'-1'
select @accountId = id
from tbAccount
where CitcoAcctId=@CitcoAcctId
and CitcoFundId = @CitcoFundId
and CitcoHolderId = @CitcoHolderId
else
begin
select @accountId=id
from tbAccount
where CitcoAcctId=@CitcoAcctId
end

print '@accountId='+convert(nvarchar,@accountId)

if isnull(@accountId,-1) <> -1 -- acount exist
begin
print 'first begin end'
select @balanceRecordId = id
from tbBalance
where AccountId=@accountId
and RecordTypeId=1
and datediff(month,@finalDate,BalanceDate)=0

if isnull(@balanceRecordId,-1) <> -1 -- balace exist
begin
if isnull(@redemptionAmount,-1) != -1 -- redemtion must be
begin
PRINT ' WEHE GOT INTO isnull(@redemptionAmount,-1) != -1'
select @redemptionRecordId=id
from tbBalance
where AccountId=@accountId
and RecordTypeId=2
and datediff(month,@finalDate,BalanceDate)= -1
PRINT '@accountId =' + convert(nvarchar,@accountId) + ' @redemptionRecordId='+ISNULL(convert(nvarchar,@redemptionRecordId),'NULL')
if isnull(@redemptionRecordId,-1)=-1
begin
select @res=3
return (@res) -- redemption is not found
end
end

begin transaction
update tbBalance
set Amount= @balanceAmount
where id=@balanceRecordId
if isnull(@redemptionRecordId,-1)!=-1
update tbBalance
set Amount= @redemptionAmount
where id=@redemptionRecordId
commit
select @res=0
return(@res)

end
else
begin
select @res=2
return (@res) -- estimated balance not found
end

end

else
begin
select @res=1
return (@res) -- account is not found
end

Сообщ. #893886
28.03.2006 18:42
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Если я пправильно понимаю то у тебя проблема с переводом из строки в datetime в строке set @finalDate = cast('02/28/2006' as datetime).
Чтобы не иметь проблем с подобным преобразованием надо или использовать строку в формате 'yyyymmdd', то есть в твоем случае '20060228' или использовать convert с четко заданным стилем даты - для формата mm/dd/yyyy это 101.
Сообщ. #893911
28.03.2006 19:24
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 15.06.2006 1:29
Сообщ.: 12, Visits: 143
Проблем с cast у меня нет. Если я просто exec процедуру то все нормально. Фокус что эта ошибка вылезает только если я пытаюсь пользоваться дебагером в Query Analyzer. Поэтому основной вопрос почему у меня дебагер не работает (а выдает всякий бред как ета ошибка с cast)
Сообщ. #893924
28.03.2006 21:55
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 15.06.2006 1:29
Сообщ.: 12, Visits: 143
Ага, некоторые подвижки
Если кто знал все заранее не плюйте в монитор
1 Сервер должен быт запущен от юзер локал или домен неважно (это я знал)
2 Этот акаунт должен быт в админ группе на машине где сервер запушен (не знал)
2 Масло масляное Акаунт должен быт в группе дебуг машины сервера (админ там вроде по дефолту должен быть)
Теперь отладка идет нормально.
Но для полного счастья как быть с датами в параметрах
В окне когда дебугер спрашивает вводил дату по разному и как bazil советовал... Фигвам, ломается сразу А если этот параметр выкинуть из параметров тогда все шоколадно
Вопрос с параметром остался открытым

Так работает

ALTER proc spFinalizeBalance
@CitcoAcctId varchar(10)
,@CitcoHolderId varchar(10) = null
,@CitcoFundId varchar(10) = null
--,@finalDate datetime
,@balanceAmount money
,@redemptionAmount money = null
,@res int OUTPUT
as

--declare @CitcoAcctId varchar(10)
declare @finalDate datetime
--declare @balanceAmount money
--declare @redemptionAmount money
select @finalDate=getdate()



а так нет

ALTER proc spFinalizeBalance
@CitcoAcctId varchar(10)
,@CitcoHolderId varchar(10) = null
,@CitcoFundId varchar(10) = null
,@finalDate datetime
,@balanceAmount money
,@redemptionAmount money = null
,@res int OUTPUT
as

--declare @CitcoAcctId varchar(10)
--declare @finalDate datetime
--declare @balanceAmount money
--declare @redemptionAmount money
--select @finalDate=getdate()

Сообщ. #893941
28.03.2006 22:32
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 15.06.2006 1:29
Сообщ.: 12, Visits: 143
Ну все робяты
С датами я разобрался опять же как bazil навел
Посмотрел как QA выводит дату и опа yyyy-mm-dd проканало
Всем спасибо
Сообщ. #893942
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 9:44