--统计每个寝室各个状态的床位数并填充统计表数据
declare @count int
declare @zksm nvarchar(20)
declare @qsid nvarchar(7)
declare @zkm nvarchar(1)
declare cur cursor for select qsid from GYGL_qsb
open cur
fetch cur into @qsid
while(@@fetch_status=0)
  begin      declare cur1 cursor for select cwzkm from GYGL_CWZKM
      open cur1
      fetch cur1 into @zkm
      while(@@fetch_status=0)
         begin           set @zksm = (select top 1 zksm from gygl_cwzkm where cwzkm=@zkm)
           set @count= (select count(*) from gygl_cwb where CWZKM=@zkm and qsid=@qsid)
           exec('insert into GYGL_CWTJ (QSID,['+@zksm+']) values (@qsid,@count)') --错误应该在这句
          -- exec('insert into GYGL_CWTJ (QSID,['+@zksm+']) values ('+@qsid+','+@count+')') --这句也不行
           fetch cur1 into @zkm
         end
      close cur1
      deallocate cur1
      fetch cur into @qsid
   end
close cur
deallocate cur
消息 137,级别 15,状态 2,第 1 行
必须声明标量变量 "@qsid"。
消息 137,级别 15,状态 2,第 1 行
必须声明标量变量 "@qsid"。
消息 137,级别 15,状态 2,第 1 行
必须声明标量变量 "@qsid"。
消息 137,级别 15,状态 2,第 1 行
必须声明标量变量 "@qsid"。

解决方案 »

  1.   

    ''''+qsid+''','+Cast(@count  as nvarchar)+')'
      

  2.   

    应该是类似于这样的写法exec('insert into GYGL_CWTJ (QSID,['+@zksm+']) values ('+@qsid+','+@count+')')但是@count int ,@count 是int类型的,不能直接拼串,需要转换exec('insert into GYGL_CWTJ (QSID,['+@zksm+']) values ('+@qsid+','+cast(@count as varchar(20))+')')
      

  3.   

    Try
    SET @sql = 'insert into GYGL_CWTJ (QSID,['+@zksm + ']) values ('+@qsid +','  + @count +')'
      

  4.   


    用了你的这句消息 128,级别 15,状态 1,第 1 行
    在此上下文中不允许使用名称 "N01101"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
    消息 128,级别 15,状态 1,第 1 行
    在此上下文中不允许使用名称 "N01101"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
    消息 128,级别 15,状态 1,第 1 行

    N01101是Qsid 的具体记录
      

  5.   


    报错消息 102,级别 15,状态 1,第 23 行
    'cast' 附近有语法错误。
      

  6.   

    --------创建床位状况统计表
    if exists (select *  from  dbo.sysobjects  where 
      id  =  object_id(N'GYGL_CWTJ')   and 
      OBJECTPROPERTY(id, N'IsUserTable')  =  1)   
      drop   table   GYGL_CWTJ   
    create table GYGL_CWTJ
    ([Qsid] nVarChar(7)  PRIMARY KEY )declare @mc nvarchar(40) 
    declare cur cursor for select zksm from GYGL_CWZKM
    open cur
    fetch cur into @mc
    while(@@fetch_status=0)
    begin
    ---Alter table GYGL_CWTJ add @mc int 
    exec('alter table GYGL_CWTJ add  ['+@mc+'] int')
    fetch cur into @mc
    end
    close cur
    deallocate cur
    --------------------------------------
    --统计每个寝室各个状态的床位数并填充统计表数据
    declare @count int
    declare @zksm nvarchar(20)
    declare @qsid nvarchar(7)
    declare @zkm nvarchar(1)
    declare cur cursor for select qsid from GYGL_qsb
    open cur
    fetch cur into @qsid
    while(@@fetch_status=0)
      begin      declare cur1 cursor for select cwzkm from GYGL_CWZKM
          open cur1
          fetch cur1 into @zkm
          while(@@fetch_status=0)
             begin           set @zksm = (select top 1 zksm from gygl_cwzkm where cwzkm=@zkm)
               set @count= (select count(*) from gygl_cwb where CWZKM=@zkm and qsid=@qsid)
             --  exec('insert into GYGL_CWTJ (QSID,['+@zksm+']) values (@qsid,@count)') --错误应该在这句
              exec('insert into GYGL_CWTJ (QSID,['+@zksm+']) values ('+@qsid+','+cast(@count as nvarchar(20))+')')         --exec('insert into GYGL_CWTJ (QSID,['+@zksm+ ']) values (' +@qsid+',' +@count+')') --这句也不行
               fetch cur1 into @zkm
             end
          close cur1
          deallocate cur1
          fetch cur into @qsid
       end
    close cur
    deallocate cur前面创建表的没有问题