首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sybase ASE 12问题

Sybase ASE 12问题
EN

Database Administration用户
提问于 2014-03-24 16:42:20
回答 1查看 220关注 0票数 2

我支持一个拥有许多表的数据库,这些表包含非常相似的数据。随着时间的推移,这些数据中的大部分是不需要的,而且表名是动态的,因为应用程序正在创建这些表,当前的日期在表名中使用。

我正在尝试编写一个批处理文件,该文件使用isql删除不再需要存储在所有表中的行。它们都以相同的一组字符开始,后面跟着_creation日期。

是否有任何方法可以编写脚本来查找这些名称,或者使用通配符,例如:

代码语言:javascript
复制
DELETE FROM Table_* WHERE Type = 1

根据我的测试,上面的SQL命令不起作用。有没有一种不用指定确切的表名就能解决这个问题的方法?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-03-25 14:36:42

Sybase ASE将不允许您使用通配符直接从多个表中删除行,但是创建一个脚本来查找表名并遍历它们非常简单。

您可以通过在数据库中查询sysobjects来查找表名。

要查找前缀为Table_的所有表,请执行以下操作:

代码语言:javascript
复制
select name from myDatabase..sysobjects
where type = "U"
and name like "Table\_%" escape "\"

在上面的查询中,"U"是用户定义表的标志。另外,由于_是the中的单个字符通配符,所以我们必须将其转义以找到文字_。to允许几乎任何字符充当转义,但它必须在like子句之后定义。最后,%是多字符通配符,在*nix和DOS中相当于*的to。

还可以使用上面的查询来构建sql脚本。我们首先告诉服务器不要使用set nocount打印受查询影响的行数。这样我们就可以创建一个没有错误的脚本,而不需要额外的编辑.

代码语言:javascript
复制
set nocount on    \\supressess rows affected printout
select "delete from " +name+ " where type = 1" + char(10) + "go"
from myDatabase..sysobjects
where type = "U"
and name like "Table\_%" escape "\"
go

如果您从isql执行此操作,并使用-b标志来压制标头,使用-o标志将输出重定向到文件,那么它将构建一个脚本,然后直接执行该脚本。

代码语言:javascript
复制
isql -Uusername -Ppassword -Sservername -b -omyScriptToDeleteData.sql -iSQLToFindTables.sql
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/61631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档