我正在使用Sybase ASE数据库.
我有两个表看起来像:
表Shops:
---------------------
| ShopName | ShopID |
---------------------
| Sweetie | 1 |
| Candie | 2 |
| Sugarie | 3 |
---------------------
Run Code Online (Sandbox Code Playgroud)
表Sweets:
----------------------
| SweetName | ShopID |
----------------------
| lolly | 1 |
| redlolly | 1 |
| greenloly | 1 |
| taffy | 2 |
| redtaffy | 2 |
| bluetaffy | 2 |
| choco | 3 |
| mintchoco | 3 …Run Code Online (Sandbox Code Playgroud) 给出如下表:
id key val
---- ---- -----
bob hair red
bob eyes green
Run Code Online (Sandbox Code Playgroud)
还有另一张表:
id key val
---- ---- -----
fred hair red
fred eyes green
fred shoe 42
joe hair red
joe eyes green
greg eyes blue
greg hair brown
Run Code Online (Sandbox Code Playgroud)
我想在表b中找到与表中的人完全匹配的人,在这种情况下Bob和Joe.弗雷德不算数,因为他也有鞋码.这是在Sybase中,因此没有完全外连接.我想出了一个带有联盟的选择,这个联盟可以归还那些肯定不一样的人,但我不确定如何有效地选择那些人.
或者,如果它更简单,我如何检查b中的哪些组不止一次?
当我使用isql进行查询时,我得到以下消息和查询块.
数据库foo中的事务日志几乎已满.您的事务将暂停,直到日志中的空间可用.
当我从Python做同样的事情时:
cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)
查询阻止,但我想看到此消息.
我试过了:
Sybase.set_debug(sys.stderr)
connection.debug = 1
Run Code Online (Sandbox Code Playgroud)
我正在使用:
编辑:问题是,"如何在python程序中捕获此警告消息?"
Dapper可以将查询参数作为匿名对象传递,并支持任何ADO.NET数据提供程序.但是,对Sybase 15 ADO.NET驱动程序运行以下查询时:
using (var connection = new AseConnection("..."))
{
connection.Open();
var results = connection.Query<Foo>(
"dbo.sp_columns", new { table_name = "dbo.sysusers"},
commandType: CommandType.StoredProcedure);
}
Run Code Online (Sandbox Code Playgroud)
...抛出以下错误:
Sybase.Data.AseClient.AseException: Procedure sp_columns expects parameter @table_name, which was not supplied.
at Sybase.Data.AseClient.AseCommand.?(Int32 A_0)
at Sybase.Data.AseClient.AseCommand.?()
at Sybase.Data.AseClient.AseCommand.?(CommandBehavior A_0)
at Sybase.Data.AseClient.AseCommand.System.Data.IDbCommand.ExecuteReader()
at Dapper.SqlMapper.<QueryInternal>d__13`1.MoveNext() in SqlMapper.cs: line 579
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList(IEnumerable`1 source)
at Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in SqlMapper.cs: line 536
Run Code Online (Sandbox Code Playgroud)
将其更改为DynamicParameters使用"@table_name"设置的Dapper …
GO为sybase编写sql时我为什么要使用?在我的项目的大多数现有sql中,没有GO,但是当为表创建生成DDL时,作为示例,应用程序插入许多GO语句.
感谢答案,我理解这GO与;其他数据库类似,因为人们已经有人指出它是一个分隔符.
另外一个问题是GO,sybase是否完全等同于;在Oracle中输入?
我知道oracle中复制结构和数据的语句.
create table mytable1 as select * from mytable;
Run Code Online (Sandbox Code Playgroud)
但是如何在Sybase ASE中实现相同的功能呢?
我正在使用node.js express框架开发应用程序,并且需要连接到sybase ASE数据库.我做了足够的搜索,找不到node.js的sybase驱动程序.node.js不支持sybase,还是应该使用通用驱动程序?
有没有办法使用Sql Server Management Studio 2008连接到Sybase(ASE)数据库实例?我尝试使用其他工具进行连接但是它们非常有限并且想要使用SSMS.
我试图在Sybase ASE 12上使用建议的查询,它抱怨语法错误.
SELECT
item,
( SELECT TOP 1 tags.tag
FROM #tags tags
LEFT JOIN t o
ON tags.tag = o.tag
AND o.item_id = n.item_id
WHERE o.tag IS NULL
ORDER BY tags.tag
) 'tag',
value
FROM
t_new n
Run Code Online (Sandbox Code Playgroud)
错误: Incorrect syntax near the keyword 'top'.
但是,当我用MAX()替换(TOP 1 tag... ORDER BY tag)时,同样的查询有效:
SELECT
item,
( SELECT max(tags.tag)
FROM #tags tags
LEFT JOIN t o
ON tags.tag = o.tag
AND o.item_id = n.item_id
WHERE o.tag IS NULL …Run Code Online (Sandbox Code Playgroud) 这应该很简单.
该的Sybase文档("例1"),说你没有指定size参数,但即使我做的:
create database pubs5 on default = '10M'
Run Code Online (Sandbox Code Playgroud)
我仍然收到一个错误:
Could not execute statement.
CREATE DATABASE failed because of incorrectly specified or unavailable
space. Total number of megabytes specified and available must be at
least 6 megabytes so Model Database can be copied to the new database.
SQLCODE=1810
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的大小(超过6MB),删除大小并尝试双引号,单引号,没有引号.
为什么这么难?
谢谢.