|
|
|
Junior 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
Подскажите где грабли. Спасибо
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.10.2007 19:07
Сообщ.: 292,
Visits: 3 426
|
|
Чтоб понять надоть, как говорил Якубович в передаче "Поле чудес" -
КОД В СТУДИЮ !
|
|
|
|
|
Junior 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
|
|
|
|
|
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.
|
|
|
|
|
Junior Member
      
участник
Last Login: 15.06.2006 1:29
Сообщ.: 12,
Visits: 143
|
|
| Проблем с cast у меня нет. Если я просто exec процедуру то все нормально. Фокус что эта ошибка вылезает только если я пытаюсь пользоваться дебагером в Query Analyzer. Поэтому основной вопрос почему у меня дебагер не работает (а выдает всякий бред как ета ошибка с cast)
|
|
|
|
|
Junior 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()
|
|
|
|
|
Junior Member
      
участник
Last Login: 15.06.2006 1:29
Сообщ.: 12,
Visits: 143
|
|
Ну все робяты
С датами я разобрался опять же как bazil навел
Посмотрел как QA выводит дату и опа yyyy-mm-dd проканало
Всем спасибо
|
|
|
|