CREATE   PROCEDURE dbo.T_GetTablePKey
        @TableName varchar(50) output,
ASEXEC sp_pkeys @table_name=@TableNamego
declare @TableName varchar(50) 
exec T_GetTablePKey @TableName output
--说明执行exec T_GetTablePKey @TableName output后@tableName就获得了你想要的值了。

解决方案 »

  1.   

    不知道是不是我操作有误?
    我把上面的代码复制进去执行得不结果.其实我是想
    表名做为参数
    得到表的主键的字段名我用EXEC sp_pkeys @table_name='T_BookSort'执行后会返回一条记录
    里面有COLUMN_NAME,我想把这个字段的数据取过来.好像我用存储过程
    ALTER        PROCEDURE dbo.T_GetTablePKey
            @TableName varchar(50) output
    AS
    EXEC sp_pkeys @table_name=@TableName表名参数我用T_BookSort,得不到结果...
      

  2.   

    /*
       获取指定表的主键列表
       调用:
       declare @tableName varchar(20),@pkNames varchar(100)
       set @tableName='表名'
       exec T_GetTablePKey @tableName,@pkNames out
       select @pkNames
    */
    CREATE   PROCEDURE dbo.T_GetTablePKey
            @TableName varchar(50),
            @pkNames varchar(100) output
    ASdeclare @r varchar(1000)
    set @r=''
    SELECT @r=@r+','+COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
    WHERE TABLE_NAME=@TableName and CONSTRAINT_NAME like 'pk%'
    set @pkNames=stuff(@r,1,1,'')go
      

  3.   

    create table #
    (
      TABLE_QUALIFIER sysname,
      TABLE_OWNER     sysname,
      TABLE_NAME      sysname,
      COLUMN_NAME     sysname,
      KEY_SEQ         int,
      PK_NAME         sysname
    )
    insert # exec sp_pkeys h_infoselect [主键名]=C.COLUMN_NAME,[类型]=B.name
    from syscolumns A
    join systypes   B on A.xtype=B.xtype
    join # C on A.name=C.COLUMN_NAME
    where A.id=object_id('h_info')--删除测试环境
    drop table #--结果
    /*
    主键名             类型     
    ---------------- ---------
    Bianhao           varchar(所影响的行数为 1 行)