GH教學

GodHelp線上補習班、各類教學分享網站(程式設計、Flash遊戲教學、影音轉檔、動畫、繪圖、Go Home Schooling.....等等)

搜尋

StoredProcedure Output

1.SQL 語法,命令已順利完成。 GO Create procedure [dbo].[Emp_allHoliday_20] (@Emp varchar(6)) as Declare @tDate varchar(8), @Mm int, @Dd int, @StrDd varchar(2), @Hh varchar(2), @StrAll varchar(128) Set @StrAll = '' Set @Dd =1 select @Mm = day(dateadd(mm,1,getdate())-day(getdate())) while @Dd <= @Mm begin if (len(@Dd)=1) select @StrDd = '0' + str(@Dd,1,0) else select @StrDd = str(@Dd,2,0) select @tDate = convert(varchar(6),getdate(),112) + @StrDd SELECT @Hh = [HOLIDAY] FROM [HRIS].[dbo].[DUTYWORK] where [WORKDATE] = @tDate and [EMPLOYECD] = @Emp select @Dd = @Dd +1 select @StrAll = @StrAll + @Hh end return @StrAll 2.查詢指令; Declare @Hh int EXECUTE @Hh = Emp_allHoliday_20 'M00565' select @Hh varchar 值 'NYNNNNYNYNNNNNNYNNNNNNNYNNNNNY' 是我要的值!!卻出現以下的錯誤訊息,請幫我找出問題在那??感恩!! 訊息 245,層級 16,狀態 1,程序 Emp_allHoliday_20,行 26 將 varchar 值 'NYNNNNYNYNNNNNNYNNNNNNNYNNNNNY' 轉換成資料類型 int 時,轉換失敗。


影音教學解說如下







由於你接的@Hh是int但你又returnㄧ個varchar所以錯誤
SQL Return 只能傳int
傳0表示成功,其他值可自行定義但也是必須是int型態喔

如果你要的回傳值是varchar
建議修改語法如下

Create procedure [dbo].[spEmp_allHoliday_20] (@Emp varchar(6),@StrAll varchar(128) Output)
as
Declare @tDate varchar(8), @Mm int, @Dd int, @StrDd varchar(2), @Hh varchar(2)--, @StrAll varchar(128)
Set @StrAll = ''
Set @Dd =1
select @Mm = day(dateadd(mm,1,getdate())-day(getdate()))
while @Dd <= @Mm
begin
if (len(@Dd)=1)
select @StrDd = '0' + str(@Dd,1,0)
else
select @StrDd = str(@Dd,2,0)

select @tDate = convert(varchar(6),getdate(),112) + @StrDd
SELECT @Hh = [HOLIDAY] FROM [HRIS].[dbo].[DUTYWORK] where [WORKDATE] = @tDate and [EMPLOYECD] = @Emp
--set @Hh='NYNNNNYNYNNNNNNYNNNNNNNYNNNNNY'
select @Dd = @Dd +1
select @StrAll = @StrAll + @Hh
end



--執行指令
Declare @StrAll2 varchar(128)
EXECUTE spEmp_allHoliday_20 'M00565', @StrAll2 Output
select @StrAll2

Create trigger

建立MS SQL Trigger
CREATE TRIGGER emp_sal_trg ON emp
FOR INSERT,Update
AS

declare @min_sal_new NUMBER(7, 2),@min_sal_old NUMBER(7, 2)
--取得Insert update的min_sal new old值
set @min_sal_new=(SELECT ins.[min_sal] FROM inserted ins)
set @min_sal_old=(SELECT del.[min_sal] FROM deleted del)
--也可以針對特定欄位的Update作程序
IF UPDATE(min_sal)
begin
--criteria
end

建立Oracel Trigger
create or replace trigger emp_sal_trg
before insert or update of min_sal on emp
referencing old as old_value
new as new_value
for each row

--old值:old_value.min_sal
--new值:new_value.min_sal
when (條件)
begin
--criteria
end;



但DB會因為Trigger多少影響一些效能
所以要適當處理

活動

給您專屬賀卡

好站

知識+名片

GH知識+

天氣

Sitetag台灣部落格列表

統計

Blog Look Score and Rank