标签: advantage-database-server

如何在WHERE子句中使用SELECT语句编写SQL DELETE语句?

数据库:Sybase Advantage 11

在我寻求规范化数据的过程中,我试图删除我从这个SELECT语句得到的结果:

SELECT tableA.entitynum
FROM tableA q
INNER JOIN tableB u on (u.qlabel = q.entityrole AND u.fieldnum = q.fieldnum) 
WHERE (LENGTH(q.memotext) NOT IN (8,9,10) 
OR q.memotext NOT LIKE '%/%/%')
AND (u.FldFormat = 'Date')
;
Run Code Online (Sandbox Code Playgroud)

这是DELETE我提出的陈述:

DELETE FROM tableA
WHERE (SELECT q.entitynum
FROM tableA q
INNER JOIN tableB u on (u.qlabel = q.entityrole AND u.fieldnum = q.fieldnum) 
WHERE (LENGTH(q.memotext) NOT IN (8,9,10) 
OR q.memotext NOT LIKE '%/%/%')
AND (u.FldFormat = 'Date'))
;
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此语句时,我不断收到此错误:

ERROR IN …
Run Code Online (Sandbox Code Playgroud)

sql select advantage-database-server where-clause sql-delete

67
推荐指数
3
解决办法
32万
查看次数

在单个语句中更新多个值

我有一个主/详细信息表,并希望根据详细信息表更新主表中的一些汇总值.我知道我可以像这样更新它们:

update MasterTbl set TotalX = (select sum(X) from DetailTbl where DetailTbl.MasterID = MasterTbl.ID)
update MasterTbl set TotalY = (select sum(Y) from DetailTbl where DetailTbl.MasterID = MasterTbl.ID)
update MasterTbl set TotalZ = (select sum(Z) from DetailTbl where DetailTbl.MasterID = MasterTbl.ID)
Run Code Online (Sandbox Code Playgroud)

但是,我想在一个声明中做到这一点,如下所示:

update MasterTbl set TotalX = sum(DetailTbl.X), TotalY = sum(DetailTbl.Y), TotalZ = sum(DetailTbl.Z)
from DetailTbl
where DetailTbl.MasterID = MasterTbl.ID group by MasterID
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我也尝试过省略"group by"子句的版本.我不确定我是否遇到了我的特定数据库(Advantage)或我的SQL限制.可能是后者.有人可以帮忙吗?

sql advantage-database-server

24
推荐指数
2
解决办法
19万
查看次数

为什么使用数据库视图?

在db design right方法中使用"view"还是应该处理代码端?有什么优点或缺点?

database-design view advantage-database-server database-schema

9
推荐指数
2
解决办法
4883
查看次数

Advantage Database Server:缓慢的存储过程性能

我有一个关于ADS中存储过程性能的问题.我创建了一个具有以下结构的简单数据库:

CREATE TABLE MainTable
(
   Id    INTEGER PRIMARY KEY,
   Name  VARCHAR(50),
   Value INTEGER
);

CREATE UNIQUE INDEX MainTableName_UIX ON MainTable ( Name );

CREATE TABLE SubTable
(
  Id     INTEGER PRIMARY KEY,
  MainId INTEGER, 
  Name   VARCHAR(50),
  Value  INTEGER
);

CREATE INDEX SubTableMainId_UIX ON SubTable ( MainId );
CREATE UNIQUE INDEX SubTableName_UIX ON SubTable ( Name );

CREATE PROCEDURE CreateItems
( 
  MainName  VARCHAR ( 20 ),
  SubName   VARCHAR ( 20 ),
  MainValue INTEGER,
  SubValue  INTEGER,
  MainId    INTEGER OUTPUT,
  SubId     INTEGER OUTPUT
) …
Run Code Online (Sandbox Code Playgroud)

stored-procedures advantage-database-server

6
推荐指数
2
解决办法
2138
查看次数

SSIS ISNULL为空字符串

所以我目前正在使用SSIS 2008从旧的Advantage数据库服务器迁移到SQL 2005.旧的Advantage数据库中的一个列是MEMO类型.默认情况下,这会转换为DT_TEXT列.好吧,在新数据库中,我不需要这么大的字段,但可以将其限制为诸如VARCHAR(50)之类的东西.我成功设置了一个派生列转换,使用以下表达式对其进行转换:

(DT_STR,50,1252)[ColumnName]
Run Code Online (Sandbox Code Playgroud)

现在我想更进一步,用空字符串替换所有NULL值.使用ISNULL([ColumnName])?"":(DT_STR,50,1252)[ColumnName]表达式似乎很容易,但问题是OLE DB目标包含以下错误

无法在unicode和非unicode字符串之间进行转换...

显然,整个ISNULL表达式将数据类型转换为Unicode字符串[DT-WSTR].我已经在整个表达式或不同的部分上尝试了各种演员表,但我无法获得与我需要的数据类型相匹配的数据类型.

首先,是否可以将DT_TEXT类型直接转换为unicode?据我所知,演员阵容不会这样.如果没有,有没有办法让表达式工作,以便将NULL值转换为空字符串?

谢谢你的帮助!

ssis data-migration advantage-database-server

6
推荐指数
1
解决办法
7865
查看次数

执行查询后数据集的自定义排序顺序?

我希望数据库查询的结果集具有特定的顺序.我想要订购的信息不包含在数据库中,而是在代码中动态生成(因此我无法使用ORDER BY).

有没有办法执行数据库查询对数据集进行排序?(我不需要索引访问,但只想迭代所有记录.)

delphi sorting advantage-database-server dataset delphi-2009

6
推荐指数
1
解决办法
6932
查看次数

快速SQL查询但结果检索速度慢

我正在使用Sybase的Advantage Database Server,目前还有一个很快的快速连接查询,运行速度非常快.问题是在运行查询后我想将结果放入一个字符串中.我检索了55000个条目的数据集.现在最多需要16秒.将它放入字符串中.我的查询只花了8毫秒才能运行.我的第一个尝试是这样的:

    aADSQuery.Open
    aADSQuery.First
    WHILE not aADSQuery.eof do
    begin
       s := s + aADSQuery.FieldbyName('Name').asString+',';
       aADSQuery.Next;
    end;
Run Code Online (Sandbox Code Playgroud)

之后,我试着避免使用aADSQuery.next,但是aADSQuery.RecordCount花了我9秒.

    aADSQuery.Open
    aADSQuery.First
    Count := aADSQuery.RecordCount;
    for i:=0 to count-1 do
    begin
      aADSQuery.RecNo := i;
      aADSQuery.FieldbyName('Name').AsString; 
    end;
Run Code Online (Sandbox Code Playgroud)

数据库已编制索引,条目ID为主键,其他列为indizes.我考虑创建一个视图来计算我的条目以避免记录计数,这可能与sql计数完全相同.但是视图中的条目计数与之前的时间相同.如果我在基表上使用带有130000个条目的sql计数,则只需要200 ms.但是,如果我对结果表进行计数,而不使用视图则需要9秒.我觉得它是,因为没有新的临时结果表的indizes.有谁知道如何以正确的方式处理这类问题或如何获得更快的结果计数?

非常感谢你

delphi advantage-database-server

6
推荐指数
1
解决办法
2935
查看次数

DataAdapter不需要打开数据库连接吗?

我尝试在C#.net中使用DataAdapter.我仍然不了解DataAdapter.

我阅读了很多关于DataAdapter和DataReader的文章和博客.

我了解DataAdapter会在需要时自动打开和关闭数据库.

但,

//conn.Open();
AdsDataAdapter da;
da = new AdsDataAdapter("Select * from Test", conn);
AdsCommandBuilder cb;
cb = new AdsCommandBuilder(da);

DataSet ds = new DataSet();
da.Fill(ds, "Test");

DataRow newrow = ds.Tables["Test"].NewRow();
newrow["Name"] = "How about";
ds.Tables["Test"].Rows.Add(newrow);
da.Update(ds, "Test");
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我收到一条错误消息,提示"连接必须打开".

为什么适配器无法自动打开连接?

并且,我想使用insertCommand插入数据(对于此测试,我打开了连接).

da.InsertCommand = new AdsCommand("INSERT INTO test (NAME) values('Insert Test #1')", conn);
//da.InsertCommand.ExecuteNonQuery(); // it works
da.Update(ds,"Test"); //but it does not works.
Run Code Online (Sandbox Code Playgroud)

很多例子使用Adapter.Update(),但对我来说,它不起作用:(

没有错误,也没有插入.

并使用da.InsertCommand.ExecuteNonQuery(); 而不是Update(),它的工作原理.

我究竟做错了什么?

谢谢!

c# asp.net advantage-database-server dataadapter

6
推荐指数
1
解决办法
1万
查看次数

为什么我会收到"太多局部常量"错误?

Delphi 2009抱怨E2283错误:[DCC错误] outputcode.pas(466):E2283局部常量太多.使用较短的程序

Delphi 2007编译得很好.我找不到丰富的局部常数,它是一个短(500行)单位.你看到我能解决的任何丰富的常量或文字吗?

procedure TOutputCodeForm.FormCreate(Sender: TObject);
var
   poParser : TStringStream;
begin

   if ( IsWindowsVista() )  then
   begin
      SetVistaFonts( self );
   end;

   poParser := TStringStream.Create( gstrSQLParser );

   SQLParser := TSyntaxMemoParser.Create( self );
   SQLParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo';
   SQLParser.UseRegistry := True;
   SQLParser.CompileFromStream( poParser );

   FreeAndNil( poParser );
   poParser := TStringStream.Create( gstrCPPParser );



   cppParser := TSyntaxMemoParser.Create( self );
   cppParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo';
   cppParser.UseRegistry := True;
   cppParser.CompileFromStream( poParser );

   FreeAndNil( poParser );
   poParser := TStringStream.Create( gstrPasParser );

   pasParser := TSyntaxMemoParser.Create( self …
Run Code Online (Sandbox Code Playgroud)

delphi advantage-database-server delphi-2009

5
推荐指数
1
解决办法
3664
查看次数

是否有用于访问 Advantage Database Server 的 Python 模块?

正如标题所暗示的那样,我想知道是否有一个 Python 模块可以访问 Advantage Database Server (Sybase) 文件,例如 ADT 和 DBF。

我在网上搜索过,但找不到我要找的东西,这就是我想在这里提问的原因。

python database dbf module advantage-database-server

5
推荐指数
1
解决办法
1369
查看次数