数据库: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
我有一个主/详细信息表,并希望根据详细信息表更新主表中的一些汇总值.我知道我可以像这样更新它们:
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限制.可能是后者.有人可以帮忙吗?
在db design right方法中使用"view"还是应该处理代码端?有什么优点或缺点?
database-design view advantage-database-server database-schema
我有一个关于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) 所以我目前正在使用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值转换为空字符串?
谢谢你的帮助!
我希望数据库查询的结果集具有特定的顺序.我想要订购的信息不包含在数据库中,而是在代码中动态生成(因此我无法使用ORDER BY).
有没有办法在执行数据库查询后对数据集进行排序?(我不需要索引访问,但只想迭代所有记录.)
delphi sorting advantage-database-server dataset delphi-2009
我正在使用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.有谁知道如何以正确的方式处理这类问题或如何获得更快的结果计数?
非常感谢你
我尝试在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(),它的工作原理.
我究竟做错了什么?
谢谢!
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) 正如标题所暗示的那样,我想知道是否有一个 Python 模块可以访问 Advantage Database Server (Sybase) 文件,例如 ADT 和 DBF。
我在网上搜索过,但找不到我要找的东西,这就是我想在这里提问的原因。
delphi ×3
delphi-2009 ×2
sql ×2
asp.net ×1
c# ×1
dataadapter ×1
database ×1
dataset ×1
dbf ×1
module ×1
python ×1
select ×1
sorting ×1
sql-delete ×1
ssis ×1
view ×1
where-clause ×1