CREATE FUNCTION CHI_X2
(
@a1 INT,
@b1 INT,
@a2 INT,
@b2 INT
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @Result int
DECLARE @tr1 INT;
DECLARE @tr2 INT;
DECLARE @tc1 INT;
DECLARE @tc2 INT;
DECLARE @ca1 INT;
DECLARE @ca2 INT;
DECLARE @cb1 INT;
DECLARE @cb2 INT;
DECLARE @xi INT;
DECLARE @nt INT;
CREATE PROCEDURE [dbo].[pro1]
AS
BEGIN
SET @tr1 = @a1+@b1
SET @tr2 = @a2+@b2
SET @tc1 = @a1+@a2
SET @tc2 = @b1+@b2
SET @nt = @tr1+@tr2
SET @ca1 =(@tc1/@nt*@tr1)
SET @ca2 =(@tc1/@nt*@tr2)
SET @cb1 =(@tc2/@nt*@tr1)
SET @cb2 =(@tc2/@nt*@tr2)
SET @xi =((power((@a1 -@ca1),2)/@ca1)+(power((@a2 -@ca2),2)/@ca2)+(power((@b1-@cb1),2)/@cb1)+(power((@b2 -@cb2),2)/@cb2))
-- Add the T-SQL statements to compute the return value here
SELECT @Result = @xi
-- Return the result of the function
RETURN @Result
--END CHI_X2
CREATE PROCEDURE [dbo].[pro2]
AS
begin
DECLARE @max_chi INT
DECLARE @maxpos INT
DECLARE @n INT
DECLARE @SWV_CUR_OUT_Sessionnumber VARCHAR(255)
DECLARE @SWV_CUR_OUT_sessioncount VARCHAR(255)
DECLARE @SWV_CUR_OUT_timespent VARCHAR(255)
DECLARE @SWV_cursor_var1 CURSOR
DECLARE @SWV_CUR_IN_Sessionnumber VARCHAR(255)
DECLARE @SWV_CUR_IN_sessioncount VARCHAR(255)
DECLARE @SWV_CUR_IN_timespent VARCHAR(255)
delete from CH_TABLE
commit
SET @SWV_cursor_var1 = CURSOR FOR select sessionnumber, sessioncount, timespent from clusters order by sessionnumber asc
OPEN @SWV_cursor_var1
FETCH NEXT FROM @SWV_cursor_var1 INTO @SWV_CUR_OUT_sessionnumber,@SWV_CUR_OUT_sessioncount,@SWV_CUR_OUT_timespent
while @@FETCH_STATUS = 0
begin
SET @max_chi = -999
SET @maxpos = NULL
SET @SWV_cursor_var1 = CURSOR FOR select sessionnumber, sessioncount, timespent from clusters order by sessionnumber asc
OPEN @SWV_cursor_var1
FETCH NEXT FROM @SWV_cursor_var1 INTO @SWV_CUR_IN_sessionnumber,@SWV_CUR_IN_sessioncount,@SWV_CUR_IN_timespent
while @@FETCH_STATUS = 0
begin
select @n = count(*) from(select x1 as x from CH_TABLE union all select x2 from CH_TABLE) AS TabAl
where x = @SWV_CUR_OUT_sessionnumber or x = @SWV_CUR_IN_sessionnumber
if @n = 0
begin
-- SET @xi = round(CHI_X2(cur_out.sessioncount,cur_out.timespent,cur_in.sessioncount,cur_in.timespent),2)
if @xi > @max_chi
begin
SET @max_chi = @xi
SET @maxpos = cur_in.sessionnumber
end
end
FETCH NEXT FROM @SWV_cursor_var1 INTO @SWV_CUR_IN_sessionnumber,@SWV_CUR_IN_sessioncount,@SWV_CUR_IN_timespent
end
if @max_chi > -999
begin
INSERT INTO CH_TABLE(SNO, P, T) VALUES(cur_out.sessionnumber, @maxpos, @max_chi)
commit
end
CLOSE @SWV_cursor_var1
FETCH NEXT FROM @SWV_cursor_var1 INTO @SWV_CUR_OUT_sessionnumber,@SWV_CUR_OUT_sessioncount,@SWV_CUR_OUT_timespent
end
CLOSE @SWV_cursor_var1
END
私は MySQL のバックグラウンドを持っており、最近 SQL Server への移行を開始しました。
私の人生では、SQL Server で次のことを行うストアド プロシージャの例を見つけることはできません。
誰でも洞察を提供できますか?つまり、次のことが機能しないのはなぜですか?
メッセージ 156、レベル 15、状態 1、手順 CHI_X2、行 31
キーワード「PROCEDURE」付近の構文が正しくありません。Nsg 156、レベル 15、状態 1、手順 CHI_X2、行 56
キーワード「PROCEDURE」付近の構文が正しくありません。メッセージ 102、レベル 15、状態 1、プロシージャ CHI_X2、行 112 'END' 付近の構文が正しくありません。
前もって感謝します!