Sql server 在SQLServer中使用存储过程 使用[totalsolution] 去 /******对象:StoredProcedure[dbo].[Fact\u Table\u coursor4]脚本日期:2015年3月3日14:36:01******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 改变程序A 作为 开始 --目标表中所需变量的声明 声明@State\u cd varchar(15)、@District\u cd varchar(15)、@Block\u cd varchar(15), @瓦查尔地区(15),年龄在年内,人数不在年内; --声明所需的其他变量 声明@currYear int 声明@CurrDateTime日期时间 声明@DOB datetime 声明@DOBYear int 声明@Age int 声明@House_no varchar(15) 声明@UID\u头varchar(15) 声明@UID\u成员varchar(15) 声明@UID\u person varchar(15) 为游标声明状态\分区\块\区域\游标 选择x.state\u cd、y.district\u cd、z.block\u cd、a.area\u cd 来自a区z区y区x州 其中x.state\u cd=y.state\u cd y.district\u cd=z.district\u cd z.block_cd=a.block_cd; --前4个变量可从第一个表中获得 打开状态\区域\块\区域\光标 从Statewise\u Districtwise\u Blockwise\u Areawise\u游标获取下一个 分为"州","区","区","区",; --对于接下来的3个变量 WHILE(@@FETCH\u状态-1) 开始 --声明@AgeArray[100]int; 声明区域方面的\u家庭方面的\u房屋职业方面的\u家庭方面的\u成员方面的\u光标 选择x.area\U cd、y.house\U no、z.uid\U head、f.uid\U成员、p.uid、p.date\U出生日期 来自x区,y栋,z栋,f户,p人 其中x.area\u cd=@area\u cd y.area_cd=@area_cd z.area_cd=@area_cd y.house_no=z.house_no z.to_date=NULL z.UID\u head=f.UID\u head f.UID_Member=p.UID; 开放区域方向\家庭方向\家庭方向\职业方向\家庭方向\个人方向\光标 从Areawise\u Housewise\u HouseOccupencyWise\u FamilyMemberwise\u Personwise\u光标中获取下一个 进入@Area\u cd、@House\u no、@UID\u Head、@UID\u Member、@UID\u person、@DOB; WHILE(@@FETCH\u状态-1) 开始 选择DOBYear=Year(@DOB); 选择GetDate()作为CurrDateTime; 选择currYear=Year(@CurrDateTime); 选择@Age=@currYear-@DOBYear; --AgeArray[Age]=AgeArray[Age]+1; 声明DW_按块\u按区域\u按年龄\u按分布\u光标 从dbo.DW\u块级\u区域级\u年龄级\u分布中选择* 其中state\u code=@state\u cd 地区代码=@district\u cd 块代码=@block\u cd 和area_code=@area_cd 年龄_in _years=@age; 打开DW分区分区分区分区光标 从DW_区块_区域_年龄_分布_光标获取下一个 分为@Area_cd、@District_cd、@Block_cd、@Area_cd、@Age、@No_of_persons; 如果@@FETCH\u STATUS=0且@@ROWCOUNT=1 开始 更新dbo.DW\u按块\u按区域\u按年龄\u分布 设置状态\代码=@state\ cd, 地区代码=@district\u cd, 块代码=@block\u cd, area_代码=@area_cd, 年龄(以年计)=@age, 人数=@人数+1 其中state\u code=@state\u cd 地区代码=@district\u cd 块代码=@block\u cd 和area_code=@area_cd 年龄_in _years=@age; -----否则 插入到dbo.DW\u按块\u按区域\u按年龄\u分布中 值(@State_cd、@District_cd、@Block_cd、@Area_cd、@Age_in_years,1); 从Areawise\u Housewise\u HouseOccupencyWise\u FamilyMemberwise\u Personwise\u光标中获取下一个 进入@Area\u cd、@House\u no、@UID\u Head、@UID\u Member、@UID\u person、@DOB; 关闭DW分区分布光标; 解除分配数据块、区域、年龄分布光标; 结束 封闭区域(按家庭划分)成员(按个人划分)光标; 按区域分配家庭成员按个人分配光标; 结束 从Statewise\u Districtwise\u Blockwise\u Areawise\u游标获取下一个 分为"州","区","区","区",; 结束 关闭状态\区域\块\区域\光标; ---关闭状态\区域\块\区域\光标; ---解除分配数据块、区域、年龄分布光标; ---按区域分配家庭成员按个人分配光标; 取消分配按状态\u分区\u按块\u按区域\u游标; 结束 去 执行董事A;

Sql server 在SQLServer中使用存储过程 使用[totalsolution] 去 /******对象:StoredProcedure[dbo].[Fact\u Table\u coursor4]脚本日期:2015年3月3日14:36:01******/ 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 改变程序A 作为 开始 --目标表中所需变量的声明 声明@State\u cd varchar(15)、@District\u cd varchar(15)、@Block\u cd varchar(15), @瓦查尔地区(15),年龄在年内,人数不在年内; --声明所需的其他变量 声明@currYear int 声明@CurrDateTime日期时间 声明@DOB datetime 声明@DOBYear int 声明@Age int 声明@House_no varchar(15) 声明@UID\u头varchar(15) 声明@UID\u成员varchar(15) 声明@UID\u person varchar(15) 为游标声明状态\分区\块\区域\游标 选择x.state\u cd、y.district\u cd、z.block\u cd、a.area\u cd 来自a区z区y区x州 其中x.state\u cd=y.state\u cd y.district\u cd=z.district\u cd z.block_cd=a.block_cd; --前4个变量可从第一个表中获得 打开状态\区域\块\区域\光标 从Statewise\u Districtwise\u Blockwise\u Areawise\u游标获取下一个 分为"州","区","区","区",; --对于接下来的3个变量 WHILE(@@FETCH\u状态-1) 开始 --声明@AgeArray[100]int; 声明区域方面的\u家庭方面的\u房屋职业方面的\u家庭方面的\u成员方面的\u光标 选择x.area\U cd、y.house\U no、z.uid\U head、f.uid\U成员、p.uid、p.date\U出生日期 来自x区,y栋,z栋,f户,p人 其中x.area\u cd=@area\u cd y.area_cd=@area_cd z.area_cd=@area_cd y.house_no=z.house_no z.to_date=NULL z.UID\u head=f.UID\u head f.UID_Member=p.UID; 开放区域方向\家庭方向\家庭方向\职业方向\家庭方向\个人方向\光标 从Areawise\u Housewise\u HouseOccupencyWise\u FamilyMemberwise\u Personwise\u光标中获取下一个 进入@Area\u cd、@House\u no、@UID\u Head、@UID\u Member、@UID\u person、@DOB; WHILE(@@FETCH\u状态-1) 开始 选择DOBYear=Year(@DOB); 选择GetDate()作为CurrDateTime; 选择currYear=Year(@CurrDateTime); 选择@Age=@currYear-@DOBYear; --AgeArray[Age]=AgeArray[Age]+1; 声明DW_按块\u按区域\u按年龄\u按分布\u光标 从dbo.DW\u块级\u区域级\u年龄级\u分布中选择* 其中state\u code=@state\u cd 地区代码=@district\u cd 块代码=@block\u cd 和area_code=@area_cd 年龄_in _years=@age; 打开DW分区分区分区分区光标 从DW_区块_区域_年龄_分布_光标获取下一个 分为@Area_cd、@District_cd、@Block_cd、@Area_cd、@Age、@No_of_persons; 如果@@FETCH\u STATUS=0且@@ROWCOUNT=1 开始 更新dbo.DW\u按块\u按区域\u按年龄\u分布 设置状态\代码=@state\ cd, 地区代码=@district\u cd, 块代码=@block\u cd, area_代码=@area_cd, 年龄(以年计)=@age, 人数=@人数+1 其中state\u code=@state\u cd 地区代码=@district\u cd 块代码=@block\u cd 和area_code=@area_cd 年龄_in _years=@age; -----否则 插入到dbo.DW\u按块\u按区域\u按年龄\u分布中 值(@State_cd、@District_cd、@Block_cd、@Area_cd、@Age_in_years,1); 从Areawise\u Housewise\u HouseOccupencyWise\u FamilyMemberwise\u Personwise\u光标中获取下一个 进入@Area\u cd、@House\u no、@UID\u Head、@UID\u Member、@UID\u person、@DOB; 关闭DW分区分布光标; 解除分配数据块、区域、年龄分布光标; 结束 封闭区域(按家庭划分)成员(按个人划分)光标; 按区域分配家庭成员按个人分配光标; 结束 从Statewise\u Districtwise\u Blockwise\u Areawise\u游标获取下一个 分为"州","区","区","区",; 结束 关闭状态\区域\块\区域\光标; ---关闭状态\区域\块\区域\光标; ---解除分配数据块、区域、年龄分布光标; ---按区域分配家庭成员按个人分配光标; 取消分配按状态\u分区\u按块\u按区域\u游标; 结束 去 执行董事A;,sql-server,stored-procedures,Sql Server,Stored Procedures,执行存储过程时,会出现以下错误: Msg 16915,16级,状态1,程序A,第行 USE [totalsolution] GO /****** Object: StoredProcedure [dbo].[Fact_Table_coursor4] Script Date: 03/03/2015 14:36:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE A AS BEGIN

执行存储过程时,会出现以下错误:

Msg 16915,16级,状态1,程序A,第行
USE [totalsolution]
GO
/****** Object:  StoredProcedure [dbo].[Fact_Table_coursor4]    Script Date: 03/03/2015 14:36:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER  PROCEDURE A
AS
BEGIN
    -- Declaration for variables required in the destination table
    DECLARE @State_cd varchar(15),@District_cd varchar(15),@Block_cd varchar(15),
    @Area_cd varchar(15), @Age_in_years int,@No_of_persons int;
    
    -- Declaration for additional variables required 
    DECLARE @currYear int
    DECLARE @CurrDateTime datetime
    DECLARE @DOB      datetime    
    DECLARE @DOBYear  int    
    DECLARE @Age      int
    DECLARE @House_no varchar(15)
    DECLARE @UID_Head varchar(15)
    DECLARE @UID_Member  varchar(15)
    DECLARE @UID_person  varchar(15)
    
    DECLARE Statewise_Districtwise_Blockwise_Areawise_cursor CURSOR FOR
       select x.state_cd,y.district_cd,z.block_cd,a.area_cd 
              from State x,District y,Block z, Area a
              where x.state_cd=y.state_cd
              and   y.district_cd = z.district_cd
              and   z.block_cd = a.block_cd;

    -- First 4 variables may be obtained from the first table               
    OPEN Statewise_Districtwise_Blockwise_Areawise_cursor
    FETCH NEXT FROM Statewise_Districtwise_Blockwise_Areawise_cursor 
                    INTO @State_cd,@District_cd,@Block_cd, @Area_cd;

    -- For next 3 variables
    WHILE(@@FETCH_STATUS <> -1)
    BEGIN
          -- DECLARE @AgeArray[100] int;
          
          DECLARE Areawise_Housewise_HouseOccupancywise_FamilyMemberwise_Personwise_cursor CURSOR FOR
              select x.area_cd,y.house_no,z.uid_head, f.uid_member, p.UID, p.date_of_birth
              from   Area x,House y,  House_occupancy z, Family_member f, Person p
              where x.area_cd = @Area_cd
              and   y.area_cd = @Area_cd
              and   z.area_cd = @Area_cd
              and   y.house_no = z.house_no 
              and   z.to_date = NULL
              and   z.UID_head = f.UID_Head
              and   f.UID_Member = p.UID;
    
              OPEN Areawise_Housewise_HouseOccupancywise_FamilyMemberwise_Personwise_cursor 
              FETCH NEXT FROM Areawise_Housewise_HouseOccupancywise_FamilyMemberwise_Personwise_cursor 
                          INTO @Area_cd, @House_no, @UID_Head, @UID_Member, @UID_person, @DOB;
          
              WHILE(@@FETCH_STATUS <> -1)
              BEGIN                                         
                    select DOBYear = Year (@DOB);
                    select GetDate () as CurrDateTime;
                    select currYear = Year (@CurrDateTime);

                    select @Age = @currYear - @DOBYear;
                    -- AgeArray[Age] = AgeArray [Age]+1;

                    DECLARE DW_Blockwise_Areawise_Agewise_distribution_cursor CURSOR FOR
                         SELECT * FROM dbo.DW_Blockwise_Areawise_Agewise_distribution 
                              WHERE state_code = @State_cd 
                              AND   district_code = @District_cd
                              AND   block_code = @Block_cd
                              AND   area_code = @Area_cd
                              AND   age_in_years = @Age;
                     
                    OPEN DW_Blockwise_Areawise_Agewise_distribution_cursor 
                    FETCH NEXT FROM DW_Blockwise_Areawise_Agewise_distribution_cursor 
                               INTO @Area_cd, @District_cd, @Block_cd, @Area_cd, @Age, @No_of_persons;
                    
                    IF @@FETCH_STATUS = 0 AND @@ROWCOUNT = 1
                    BEGIN
                         UPDATE dbo.DW_Blockwise_Areawise_Agewise_distribution 
                           SET  state_code  = @State_cd,
                                district_code = @District_cd, 
                                block_code = @Block_cd,
                                area_code = @Area_cd,
                                age_in_years = @Age,
                                no_of_persons = @No_of_persons +1
                                
                           WHERE state_code =@State_cd 
                              AND   district_code = @District_cd
                              AND   block_code = @Block_cd
                              AND   area_code = @Area_cd
                              AND   age_in_years = @Age;
                              
                 -----   ELSE       
                           INSERT INTO dbo.DW_Blockwise_Areawise_Agewise_distribution 
                               VALUES (@State_cd,@District_cd,@Block_cd,@Area_cd,@Age_in_years,1) ;                            
                           
                    
                    FETCH NEXT FROM Areawise_Housewise_HouseOccupancywise_FamilyMemberwise_Personwise_cursor 
                          INTO @Area_cd, @House_no, @UID_Head, @UID_Member, @UID_person, @DOB;
                     CLOSE DW_Blockwise_Areawise_Agewise_distribution_cursor;
                     DEALLOCATE DW_Blockwise_Areawise_Agewise_distribution_cursor;     
              END
              CLOSE Areawise_Housewise_HouseOccupancywise_FamilyMemberwise_Personwise_cursor;
              DEALLOCATE Areawise_Housewise_HouseOccupancywise_FamilyMemberwise_Personwise_cursor;
          END 
          FETCH NEXT FROM Statewise_Districtwise_Blockwise_Areawise_cursor
                          INTO @State_cd,@District_cd,@Block_cd, @Area_cd;
     END
     CLOSE Statewise_Districtwise_Blockwise_Areawise_cursor;     

    --- CLOSE Statewise_Districtwise_Blockwise_Areawise_cursor;
   ---  DEALLOCATE DW_Blockwise_Areawise_Agewise_distribution_cursor;
   ---  DEALLOCATE Areawise_Housewise_HouseOccupancywise_FamilyMemberwise_Personwise_cursor;
     DEALLOCATE Statewise_Districtwise_Blockwise_Areawise_cursor;

END
GO

EXEC A;