为事务发布准备主键

yonghengdizhen 2004-11-13 03:26:29
事务发布要求所有发布表都具有主键定义,由于历史原因,可能有些表没有定义主键,但并不影响系统正常运行,发布时,这些表是无法进行事务发布的,为了支持事务发布,数据库管理员需要为这些表手工定义主键,次工作繁琐而重复,为了解决这个问题.我编写了如下脚本
SQL Server 2000下测试通过
DECLARE @SqlString AS varchar(8000)
DECLARE @TableName AS varchar(255)
DECLARE @IdentityCol AS varchar(255)
DECLARE curTableList CURSOR FOR
SELECT [NAME],(SELECT [name] FROM syscolumns WHERE [id]=sysobjects.id AND autoval IS NOT NULL) FROM sysobjects
WHERE xtype=N'U'
AND [id] NOT IN(SELECT b.id FROM sysobjects a JOIN sysobjects b ON a.xtype=N'PK' AND a.parent_obj=b.id)
AND status>0
ORDER BY NAME
OPEN curTableList
FETCH NEXT FROM curTableList INTO @TableName,@IdentityCol
WHILE @@FETCH_STATUS = 0
BEGIN
IF @IdentityCol IS NULL
/*对于没有标识列的表,为其新增标识列,并在该列上设置主键约束*/
SET @SqlString='ALTER TABLE ' + @TableName
+ ' ADD ' + @TableName + '_PK_Id'
+ ' INT IDENTITY'
+ ' CONSTRAINT ' + @TableName + '_PK PRIMARY KEY'
ELSE
/*对于已有标识列的表,在现有标识列上设置主键约束*/
SET @SqlString='ALTER TABLE ' + @TableName
+ ' ADD CONSTRAINT ' + @TableName + '_PK PRIMARY KEY(' + @IdentityCol + ')'
--Print @SqlString
EXECUTE (@SqlString)
FETCH NEXT FROM curTableList INTO @TableName,@IdentityCol
END
CLOSE curTableList
DEALLOCATE curTableList
...全文
165 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxrl 2004-11-19
  • 打赏
  • 举报
回复
非常感谢
netcoder 2004-11-13
  • 打赏
  • 举报
回复
谢谢

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧