2015-08-18 139 views
1

如何删除Sybase ASE 15表设置中的列。删除Sybase ASE表中的列

我已经尝试了一些,但没有成功:

alter table my_table 
drop column1, column2 

除了看它没有提供任何解决我的问题Sybase documentation

'select into'数据库选项未启用数据库 'my_db'。带有数据拷贝的ALTER TABLE无法完成。将'select '设置为'数据库选项并重新运行。

回答

3

由于在数据库中的select into选项是关闭的,有两个选择要么你使用

sp_dboption my_db, "select into", true 

OR

no datacopy参数的改变select into选项表删除列允许您从表中删除列而不执行数据复制,并减少了alter table drop列运行所需的时间。

SYBASE Documentation - Dropping Columns from a Table Without Performing a Data Copy

ALTER TABLE my_table 
DROP column1, column2 
WITH no datacopy 
+0

这不适合我。它说“关键字附近的语法不正确”WITH' –

+0

@mani_nz: - 提出新问题或在评论中显示您的查询 – HaveNoDisplayName

+0

'sp_dboption my_db,“select into,”true“在我的工作不起作用,但用双引号替换为单引号确实有用 –

1

您忘记在查询中使用关键字'COLUMN'。使用语法如下: -

ALTER TABLE my_table 
DROP COLUMN column1, column2 
+0

这不是Sybase语法,尽管我确实尝试过。我发现我的解决方案。 – insidesin

+0

我也很震惊地看到,COLUMN关键字在DOCUMENTION中没有提及。但我认为这是各地使用的默认ANSI语法。但最重要的是,你忘了接受我的答案。 ;) –

0

我找到了解决办法。我的新测试数据库关闭了“select into”选项,这意味着表格的删除/更改被拒绝。

sp_dboption my_db, "select into", true

这一切现在看起来太明显了,我知道是什么选项。

1

有趣的是,必须打开“select into”这一事实意味着Sybase服务器在内部将数据从旧表复制到表的新副本,而不使用事务日志(或使用事务日志只记录页面的分配,而不是页面内的数据更改)。 IE浏览器。有点像批量复制。我想知道这是否会导致复制问题?

另外,为了完整起见,从15.7.1版开始,“no datacopy”功能是新增功能。

2

只是想与你分享我刚刚有类似的问题,在我的情况下,我不得不在每个列名前添加“drop”。代码如下所示:

alter table dba.ABC 
drop column1, 
drop column2, 
drop column3 

commit; 

我工作的某些旧版本的sybase并不那么灵活。 干杯