来几个前阵子冒出来的问题:1、如何建一个identity列, 值从9223372036854775808。 2、声明了表变量:declare @t table (id int identity),不用SET IDENTITY_INSERT,如何插入一条记录? 3、声明了表变量:declare @t table (id int identity),不用SET IDENTITY_INSERT,如何用insert一次插入多条记录?

解决方案 »

  1.   

    再来一个,前两天帮人做的题,不算难:
    -----------------------------------------------------------------------------------
    现在有一个表结构如下:车型    起始站   终点站   票价
    ------  ------   ------   -----
    依维柯  A        E        200
    依维柯  A        D        180
    依维柯  A        B        70
    依维柯  B        C        60
    依维柯  C        E        90
    依维柯  C        D        50
    依维柯  B        E        120
    依维柯  A        C        80
    沃尔沃  A        E        260
    沃尔沃  A        B        60
    沃尔沃  B        E        180现在要写出SQL查询从起始站A到终点站E的所有可选路线及价格,查询出的结果如下:车型      线路        票价
    --------  ----------  ---------
    依维柯    A-E         200
    依维柯    A-B-E       70+120
    依维柯    A-C-E       80+90
    依维柯    A-B-C-E     70+60+90
    沃尔沃    A-E         260
    沃尔沃    A-B-E       180+60注意:只有同一种车型才可以互相转车;每条线路必须是可达的,但不能有迂回,也就是说A、B、C、D、E是依次的走,不能反过来走。
      

  2.   

    1.  declare @tb table(id decimal(38,0) identity(9223372036854775808,1))
    2.  declare @tb table(id decimal(38,0) identity(9223372036854775808,1))
        insert @tb default values
    3.  不知道
    4. 
    declare @tb table
    (
      车型 varchar(20),
      起始站 varchar(10),
      终点站 varchar(10),
      票价 int
    )
    insert @tb
    select '依维柯','A','E',        200 union all
    select '依维柯','A','D',        180 union all
    select '依维柯','A','B',        70 union all
    select '依维柯','B','C',        60 union all
    select '依维柯','C','E',        90 union all
    select '依维柯','C','D',        50 union all
    select '依维柯','B','E',        120 union all
    select '依维柯','A','C',        80 union all
    select '沃尔沃','A','E',        260 union all
    select '沃尔沃','A','B',        60 union all
    select '沃尔沃','B','E',        180--查询
    select  distinct
            A.车型 
            ,A.起始站
            +isnull('-'+A.终点站,'')
            +isnull('-'+B.终点站,'')
            +isnull('-'+C.终点站,'') as '路线'
            ,convert(varchar,A.票价)
            +isnull('+'+convert(varchar,B.票价),'')
            +isnull('+'+convert(varchar,C.票价),'') as '票价'from @tb A
    left join @tb B on A.终点站=B.起始站 and A.车型=B.车型
    left join @tb C on B.终点站=C.起始站 and B.车型=C.车型
    left join @tb D on C.终点站=D.起始站 and C.车型=D.车型
    where A.起始站='A'
          and 
          ( A.终点站='E' or
            B.终点站='E' or
            C.终点站='E' or
            D.终点站='E'
          )
    order by A.车型--结果
    /*车型                   路线                 票价   
    -------------------- --------------------------------
    沃尔沃                  A-B-E               60+180
    沃尔沃                  A-E                 260
    依维柯                  A-B-C-E             70+60+90
    依维柯                  A-B-E               70+120
    依维柯                  A-C-E               80+90
    依维柯                  A-E                 200(所影响的行数为 6 行)
    */
      

  3.   

    希望能将近期的难题都列出来,thanks
      

  4.   

    lovcal(枫兮):楼主是外星人,你要坐着神六去面试才行。
      

  5.   

    /*
    資料庫中表JP_JBSJBY的子段ztcx是這樣的φ444.5mm×253.00m+φ247.7mm×1274.98m+φ241.3mm×3566.93m現在寫一條sql語句,將它按照‘+’號分開,各個部分用欄位a1,a2,a3,a4,a5表示如果沒有五部分,象上面的只有3部分,那後面的就用空顯示就行,
    怎樣來提取顯示a1,a2,a3,a4,a5這五個地段謝謝啊!!!
    */--測試
    declare @iCount int
    ,@iPos int
    ,@vGetString varchar(100)
    ,@vString varchar(100)
    ,@cDivisionChar char(1)
    ,@vSQLString varchar(500)
    ,@vInSQLString varchar(500)select @vString='φ444.5mm×253.00m+φ247.7mm×1274.98m+φ241.3mm×3566.93m'
    ,@cDivisionChar='+'
    if(right(rtrim(@vString),1)<>@cDivisionChar)
    begin
    set @vString=@vString+@cDivisionChar
    end
    select @iCount=len(@vString)-len(replace(@vString,@cDivisionChar,''))
    ,@iPos=1
    ,@vGetString=''select identity(int,1,1) ID into #Temp from sysobjects
    select @vSQLString='create table TableName('
    ,@vInSQLString='insert into TableName('
    select @vSQLString=@vSQLString+'a'+cast(id as varchar)+' varchar(50),' 
    ,@vInSQLString=@vInSQLString+'a'+cast(id as varchar)+','
    from #Temp where ID<=@iCount
    select @vSQLString=left(@vSQLString,len(@vSQLString)-1)+')'
    , @vInSQLString=left(@vInSQLString,len(@vInSQLString)-1)+')'
    exec(@vSQLString)
    drop table #Tempwhile(@iCount>=@iPos)
    begin
    select @vGetString=''''+replace(left(@vString,len(@vString)-1),@cDivisionChar,''',''')+''''
    ,@iPos=@iPos+1
    ,@vSQLString=@vInSQLString+' values('+@vGetString+')'
    exec(@vSQLString)
    end
    select * 
    from TableName
    --刪除測試環境
    drop table TableName
    /*
    --所影響的結果
    a1 a2 a3
    φ444.5mm×253.00m φ247.7mm×1274.98m φ241.3mm×3566.93m
    φ444.5mm×253.00m φ247.7mm×1274.98m φ241.3mm×3566.93m
    φ444.5mm×253.00m φ247.7mm×1274.98m φ241.3mm×3566.93m*/
      

  6.   

    母牛的题有公式。
    (N-1)*(N/4)-2*(N/4)*(N/4)+1
      

  7.   

    # include "conio.h"main()
    {
      int i;
      int a[100];
      int s,b1,b2,sum;
      clrscr();
      a[1]=1;
      for(i=2;i<100;i++)
         a[i]=a[i-1]+4*(i-1);
      printf("Please give a number:\n");
      scanf("%d",&s);
      b1=s/4;
      b2=s%4;
      sum=a[b1+1]-(4-b2)*b1;
      printf("The number is:%d\n",sum);
      getch();
     }
    100里的
      

  8.   

    #include<iostream.h>void main()
    {int n,y;
    cin>>y;
    if( (y%4)==0 )
    n=y*y/8-y/2+1;
    else
    n=2*(y/4)*(y/4+1)+1-(4-(y%4))*(y/4);
    cout<<"n="<<n<<endl;
    }
    觉的这个好一些
      

  9.   

    子陌红尘 的那个Identity 题要靠死一大堆人哈1!包括我!
      

  10.   

    那个坐车的问题我在想能不能做出一个通解出来!!比如说B-E  ,A-D ,
    如果数据多了的话,还可能A-F 想了半天,还没有突破,大家都想一想沙1!!
      

  11.   

    http://community.csdn.net/Expert/topic/4299/4299234.xml?temp=.9074518
      

  12.   

    3、声明了表变量:declare @t table (id int identity),不用SET IDENTITY_INSERT,如何用insert一次插入多条记录?
    这个问题答案???请诸位示之,多谢
      

  13.   

    insert ...select  ....
    union all select ....
    union all select ....
    不知道对不对?!呵呵!
      

  14.   

    高手看看这个http://community.csdn.net/Expert/topic/4403/4403344.xml?temp=.8225214