select @tmp1='',@tmp2=''
                  select @tmp1=@tmp1+'['+引用的列名+'],', @tmp2=@tmp2+'['+已引用的列名+'],' 
                   from #t where 外键名称=@name insert into #tmp 
                 select top 1 'ALTER TABLE [DBO].['+表名称+'] ADD CONSTRAINT ['+@name+'] FOREIGN KEY ( '+left(@tmp1,len(@tmp1)-1)+' ) REFERENCES ['+引用的表名+'] ( '+left(@tmp2,len(@tmp2)-1)+' )' 
                  from #t where 外键名称=@name 
不太明白这段select的作用求助各位大虾

解决方案 »

  1.   

    通过参数,拼接动态字符串,select 是赋值语句。然后插入、修改表结构。
      

  2.   

    insert into #tmp  
      select top 1 'ALTER TABLE [DBO].['+表名称+'] ADD CONSTRAINT ['+@name+'] FOREIGN KEY ( '+left(@tmp1,len(@tmp1)-1)+' ) REFERENCES ['+引用的表名+'] ( '+left(@tmp2,len(@tmp2)-1)+' )'  
      from #t 
      where 外键名称=@name这样能理解么?
      

  3.   

    作用是根据你的表和列拼结添加创建键字符串,然后用来执行的#tmp表中的记录就像:
    alter table [dbo].[tablename] add constraint [fk_name] foreign key(外键列名称) references [reftablename](引用外键列名称);
      

  4.   

    三个SELECT语句。。他不仅仅是赋值语句吧???后面的的代码作何解释?
      

  5.   

    整体的作用是显示约束名为@name的约束的创建语句
    第一个select给@tmp1,@tmp初始化为空字符串
    第二个select给@tmp1赋值外键字段名, @tmp2引用表的字段名  
    第三个select拼接字符串,创建名为@name的外键约束语句