eg:
create procedure test @tablename varchar(20),@keyField varchar(20)
As
   Exec('select top 1 '+@keyField + ' from '+@tablename)

解决方案 »

  1.   

    你的意思不是很明确参照D. 使用 OUTPUT 参数
    OUTPUT 参数允许外部过程、批处理或多条 Transact-SQL 语句访问在过程执行期间设置的某个值。下面的示例创建一个存储过程 (titles_sum),并使用一个可选的输入参数和一个输出参数。首先,创建过程:USE pubs
    GO
    IF EXISTS(SELECT name FROM sysobjects
          WHERE name = 'titles_sum' AND type = 'P')
       DROP PROCEDURE titles_sum
    GO
    USE pubs
    GO
    CREATE PROCEDURE titles_sum @@TITLE varchar(40) = '%', @@SUM money OUTPUT
    AS
    SELECT 'Title Name' = title
    FROM titles 
    WHERE title LIKE @@TITLE 
    SELECT @@SUM = SUM(price)
    FROM titles
    WHERE title LIKE @@TITLE
    GO
      

  2.   

    //表部分
    create table T_aa
    (
    UserID varchar(6),
    UserName varchar(70),
    Usertitle varchar(70),
    constraint pk_aa primary key(UserID,UserName)
    )
    //存储过程部分
    create procedure up_aa @vUserName(70) output
    as 
      select @vUserName=UserName from T_aa where userid='1001'//执行存储过程部分
    declare @username varchar(70)
    exec up_aa @username output
    select @username as Username
      

  3.   

    楼主的意思不太明白.下面的查询可以查询到数据库中所有的表及对应的主键SELECT 
    表名=d.name,
    主键字段名=a.name
    FROM syscolumns a
    inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'
    where exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
    SELECT name FROM sysindexes WHERE indid in(
    SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
    )))
    order by a.id,a.colorder