22,207
社区成员
发帖
与我相关
我的任务
分享
exec ('alter table '+ @tb+' alter column ' + @col + ' varchar(14) not null')
但是执行的仍然报
服务器: 消息 5074,级别 16,状态 8,行 1
索引 'index_abc' 依赖于 列 'xlh'。
服务器: 消息 4922,级别 16,状态 1,行 1
ALTER TABLE ALTER COLUMN xlh 失败,因为有一个或多个对象访问此列。
我差 跟原来执行打印出来的 语句一样 索引没有被删除
先将索引备份 然后 索引能够删除 alter 字段属性 后 再将索引自动恢复回来 这是我想要的结果
表太多了 手动一个一个表改 太麻烦了。麻烦各位帮忙看看alter table tablename alter column columnname varchar(14)
吗?
服务器: 消息 2705,级别 16,状态 4,行 1各表中的列名必须唯一。在表 'thxlf' 中多次指定了列名 'xlh'。 (所影响的行数为 0 行) (所影响的行数为 1 行) 服务器: 消息 2705,级别 16,状态 4,行 1各表中的列名必须唯一。在表 'thxfl' 中多次指定了列名 'xlh'。
create proc ch_zdsx @col varchar(10)
as
begin
Create Table #index([index_name] sysname,[index_description] varchar(255),[index_keys] varchar(255))
declare @tb varchar(100)
Declare MyCur Cursor Local Read_Only Fast_Forward For
select a.name from sysobjects a,syscolumns b where a.id=b.id and b.name=@col and a.xtype='u'
Open MyCur
Fetch Next From MyCur Into @tb
While @@Fetch_Status = 0
Begin
declare @index varchar(50)
insert #index(index_name,index_description,index_keys) exec sp_helpindex @tb
select @index=index_name from #index a join sysobjects b on a.index_name=b.name and b.xtype='PK'
if isnull(@index,'')<>''
begin
exec ('alter table '+ @tb + 'drop CONSTRAINT ' + @index )
end
exec ('alter table '+ @tb+' add ' + @col + ' varchar(14) default('''') not null')
if isnull(@index,'')<>''
begin
exec ('alter table '+ @tb + ' add CONSTRAINT ' + @index + ' PRIMARY KEY (xlh)' )
end
Delete from #index
Fetch Next From MyCur Into @tb
End
Close MyCur
Deallocate MyCur
end
exec ch_zdsx 'xlh'
--报错如下:
/*------------------------------------------------------------
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'CONSTRAINT' 附近有语法错误。
已在表 't_ffdgh' 上定义了主键。
服务器: 消息 1750,级别 16,状态 1,行 1
未能创建约束。请参阅前面的错误信息。
服务器: 消息 2705,级别 16,状态 4,行 1
各表中的列名必须唯一。在表 'thxlf' 中多次指定了列名 'xlh'。
(所影响的行数为 0 行)
(所影响的行数为 1 行)
服务器: 消息 2705,级别 16,状态 4,行 1
各表中的列名必须唯一。在表 'thxfl' 中多次指定了列名 'xlh'。
*/
提示好多这样的错误 有谁能帮我修改一下这个 游标吗
SELECT
'alter table '+a.name+' alter columns '+b.name+'varchar(20)'
FROM
sys.objects AS a
INNER JOIN sys.columns AS b ON a.object_id=b.object_id
WHERE
b.name='xingming' AND a.type='u'
把得到的结果到查询分析器 执行。