create procedure sp_test(@tname varchar(40),@cname varchar(40)) as begin declare @sql varchar(8000),@str varchar(200) set @sql='' set @str=''
SELECT @str=@str+a.name+',' FROM syscolumns a inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' where d.name=@tname and exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (SELECT name FROM sysindexes WHERE indid in(SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid)))
set @sql='select top 1 '+@str+@cname+' from '+@tname+' order by '+left(@str,len(@str)-1)+' desc'
exec(@sql) end go
一个sp_executesql取出pk字段名. 一个exec取出所选列的行集
create procedure sp_test(@tname varchar(40),@cname varchar(40),@pk varchar(40) output) as begin declare @sql varchar(8000) set @sql='' set @pk=''
SELECT @pk=@pk+a.name+',' FROM syscolumns a inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' where d.name=@tname and exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (SELECT name FROM sysindexes WHERE indid in(SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid)))
set @pk=left(@str,len(@str)-1)
set @sql='select top 1 '+@pk+','+@cname+' from '+@tname+' order by '+@pk+' desc'
create procedure sp_test(@tname varchar(40),@cname varchar(40))
as
begin
declare @sql varchar(8000),@str varchar(200)
set @sql=''
set @str=''
SELECT
@str=@str+a.name+','
FROM
syscolumns a
inner join
sysobjects d
on
a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where
d.name=@tname
and
exists(SELECT 1
FROM
sysobjects
where
xtype='PK'
and
parent_obj=a.id
and
name in (SELECT
name
FROM
sysindexes
WHERE
indid in(SELECT
indid
FROM
sysindexkeys
WHERE
id = a.id AND colid=a.colid)))
set @sql='select top 1 '+@str+@cname+' from '+@tname+' order by '+left(@str,len(@str)-1)+' desc'
exec(@sql)
end
go
一个exec取出所选列的行集
create procedure sp_test(@tname varchar(40),@cname varchar(40),@pk varchar(40) output)
as
begin
declare @sql varchar(8000)
set @sql=''
set @pk=''
SELECT
@pk=@pk+a.name+','
FROM
syscolumns a
inner join
sysobjects d
on
a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where
d.name=@tname
and
exists(SELECT 1
FROM
sysobjects
where
xtype='PK'
and
parent_obj=a.id
and
name in (SELECT
name
FROM
sysindexes
WHERE
indid in(SELECT
indid
FROM
sysindexkeys
WHERE
id = a.id AND colid=a.colid)))
set @pk=left(@str,len(@str)-1)
set @sql='select top 1 '+@pk+','+@cname+' from '+@tname+' order by '+@pk+' desc'
exec(@sql)
return
end
go