获取SQL Server 主键

-- 建立一个测试表
SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
CREATE   TABLE   [ dbo ] . [ TableTest ] (
    
[ ID ]   [ int ]   NOT   NULL ,
    
[ Name ]   [ nvarchar ] ( 50 NULL ,
 
CONSTRAINT   [ PK_TableTest ]   PRIMARY   KEY   CLUSTERED  
(
    
[ ID ]   ASC
)
WITH  (PAD_INDEX   =   OFF , STATISTICS_NORECOMPUTE   =   OFF , IGNORE_DUP_KEY  =   OFF , ALLOW_ROW_LOCKS   =   ON , ALLOW_PAGE_LOCKS   =   ON ON   [ PRIMARY ]
ON   [ PRIMARY ]

-- --判断表的字段是否为主键
create   proc  IsPKField
@TableName   nvarchar ( 50 ),  -- 数据表名
@PKField   nvarchar ( 50 -- 字段名,注意参数的不能有[]
as
declare   @result   bit
if (   
    
  
SELECT     count ( * )   
  
FROM    sysobjects   
  
WHERE    (name    =    
                      (
SELECT    name   
                    
FROM    sysindexes   
                    
WHERE    (id    =     OBJECT_ID ( @TableName ))    AND    (indid    =    
                                        (
SELECT    indid   
                                      
FROM    sysindexkeys   
                                      
WHERE    (id    =     OBJECT_ID ( @TableName ))    AND    (colid    =    
                                                          (
SELECT    colid   
                                                        
FROM    syscolumns   
                                                        
WHERE    (id    =     OBJECT_ID ( @TableName ))    AND    (name    =     @PKField )))))))    AND    
                (xtype   
=     ' PK ' )   
    
  )
> 0    
  
begin    
    
select   @result   =   1
  
end    
  
else    
  
begin    
    
select   @result = 0    
  
end    
    
return   @result
go

-- 看一下运行效果,@PKField='ID'返回1,='Name' 返回0

DECLARE      @return_value   int

EXEC      @return_value   =   [ dbo ] . [ IsPKField ]
        
@TableName   =  N ' TableTest ' ,
        
@PKField   =  N ' ID '

SELECT      ' Return Value '   =   @return_value

GO
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值