在使用Sybase 12.5驱动程序的SQL Server 2008中,一切正常,但现在我们已经使用64位驱动程序迁移到SQL Server 2012和Sybase 15,似乎事情已经破裂.
如果我测试链接服务器连接它给我链接服务器成功的消息但是当我在视觉上深入查看目录虽然它列出了所有这些目录,但它们显示为空白如此

但项目计数是正确的,因为我们在Sybase中有许多目录.我认识到的另一个有趣的事情是,当我执行和OPENQUERY时,它给了我正确的行数,但仍显示空字符串,如此

我不知道这里发生了什么,我唯一的线索是当我在这些空白数据库中深入查看时出现此错误消息.此异常提示.

Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)
------------------------------
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
Cannot obtain the schema rowset "DBSCHEMA_TABLES" for OLE DB provider "MSDASQL" for linked server "TEST". The provider supports the interface, but returns a failure code when it is used. (Microsoft SQL Server, Error: 7311)
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样?有谁知道解决这个问题?
我有这个代码:
select a.id as tableid,
a.name as tableName,
b.name as columnName,
b.status as columnStatus,
b.type as columnType
from sysobjects a
LEFT JOIN syscolumns b
ON a.id = b.id
WHERE a.name = 'table_name'
Run Code Online (Sandbox Code Playgroud)
现在,columType显示数字.我想获取columnType的名称,该名称位于表'systypes'中的'name'列中.我怎么做?简单的LEFT JOIN将导致重复的行.
我多年来一直使用的查询突然开始抛出一个奇怪的错误.当我对查询进行外观修改(1 + x而不是x + 1)时,不再出现错误.它抱怨的存储过程甚至不再存在于服务器上!
如果有人对这个问题是什么以及为什么这个"改变"修复了它,我很好奇?
之前的查询:
UPDATE SOME_DB..JOB_QUEUE
SET ERROR_COUNT = ERROR_COUNT + 1,
JOB_START_TIME = '{1}'
WHERE JOB_ID = {0}
Run Code Online (Sandbox Code Playgroud)
查询后:
UPDATE SOME_DB..JOB_QUEUE
SET ERROR_COUNT = 1 + ERROR_COUNT,
JOB_START_TIME = '{1}'
WHERE JOB_ID = {0}
Run Code Online (Sandbox Code Playgroud)
它抛出的错误:
Sybase.Data.AseClient.AseException: Procedure sp_net_dblatency expects parameter @heartbeat, which was not supplied.
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人有任何想法在这里发生了什么?
编辑. 这是存储过程.
create procedure sp_net_dblatency
@heartbeat datetime
as
update DATABASE_1234..LATENCY set START_UTC_TIME=@heartbeat, END_UTC_TIME=getutcdate() where DATABASE_NAME=db_name()
if (@@ROWCOUNT = 0)
insert DATABASE_1234..LATENCY (DATABASE_NAME, START_UTC_TIME, END_UTC_TIME) values (db_name(), @heartbeat, getutcdate())
Run Code Online (Sandbox Code Playgroud) 我厌倦了搜索在Sybase ASE上进行不区分大小写搜索的解决方案(Sybase数据/列名称区分大小写).Sybase文档自豪地说只有一种方法可以使用Upper和Lower函数进行搜索,但是谚语说,它存在性能问题.并且相信我他们是对的,如果你的桌子有巨大的数据表现如此尴尬,你永远不会再使用上下.我向其他开发者提出的问题是:你们怎么解决这个问题?
PS请不要建议更改排序顺序或移动到任何其他数据库,在现实世界中开发人员不控制数据库.
我有一个同事给我的列列表,但这些列位于数据库中的不同表中.在Sybase中是否有某种工具可以查询列所属的表?
(我已尝试使用Google-ing这种工具,但到目前为止还没有运气)
我正在寻找一种方法来比较同一个表中2行之间的差异.从我在这里找到的(如何获得列字段的两行之间的差异?)这几乎是我想要的.我做了以下代码:
create table #tmpTest
(
id_fund int null,
id_ShareType int null,
ValueDate datetime null,
VarNAV float null,
FundPerf float null,
)
insert into #tmpTest(id_fund, id_ShareType, ValueDate, VarNAV)
values(1,1,'20140101',100)
insert into #tmpTest(id_fund, id_ShareType, ValueDate, VarNAV)
values(1,1,'20140102',20)
update #tmpTest
set hrc.FundPerf = (isnull(hrn.VarNAV, 0) - hrc.VarNAV)/hrc.VarNAV
from #tmpTest hrc
left join #tmpTest hrn on hrn.ValueDate = (select min(ValueDate) from #tmpTest where ValueDate > hrc.ValueDate)
and hrc.id_fund = hrn.id_fund and hrc.id_ShareType = hrn.id_ShareType
Run Code Online (Sandbox Code Playgroud)
我的问题是,我正在计算的结果从第1行而不是第2行开始.
下面是我得到的结果:
id_fund id_ShareType ValueDate VarNAV FundPerf
------- …Run Code Online (Sandbox Code Playgroud) 当运行执行INSERT和UPDATE的存储过程(来自.NET应用程序)时,我有时(但不经常,真的)并随机获取此错误:
错误[40001] [DataDirect] [ODBC Sybase Wire协议驱动程序] [SQL Server]您的服务器命令(系列ID#0,进程ID#46)遇到死锁情况.请重新运行您的命令.
我怎样才能解决这个问题?
谢谢.
我正在使用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) 我目前正在使用sybpydb连接到Sybase 15.7服务器.好像连接好了:
import sys
sys.path.append('/dba/sybase/ase/15.7/OCS-15_0/python/python26_64r/lib')
sys.path.append('/dba/sybase/ase/15.7/OCS-15_0/lib')
import sybpydb
conn = sybpydb.connect(user='usr', password='pass', servername='serv')
Run Code Online (Sandbox Code Playgroud)
工作正常.更改任何连接详细信息会导致连接错误.
然后我选择一个数据库:
curr = conn.cursor()
curr.execute('use db_1')
Run Code Online (Sandbox Code Playgroud)
但是,现在当我尝试运行查询时,它总是会返回 None
print curr.execute('select * from table_1')
Run Code Online (Sandbox Code Playgroud)
我试过在同一个地方运行use和select查询execute,我试过go在每次之后都包含命令,我curr.connection.commit()在每次尝试后都试过,都没有成功.我已经确认,使用dbartisan和isql我使用的相同查询返回条目.
为什么我没有从python中的查询中获得结果?
编辑:
只是一些额外的信息.为了使sybpydb导入工作,我不得不更改两个环境变量.我添加了lib路径(与我添加的路径相同sys.path)$LD_LIBRARY_PATH,即:
setenv LD_LIBRARY_PATH "$LD_LIBRARY_PATH":dba/sybase/ase/15.7/OCS-15_0/python/python26_64r/lib:/dba/sybase/ase/15.7/OCS-15_0/lib
Run Code Online (Sandbox Code Playgroud)
我不得不将SYBASE路径从12.5改为15.7.所有这一切都是在csh.
如果我打印conn.error(),在每个curr.execute()之后,我得到:
("Server message: number(5701) severity(10) state(2) line(0)\n\tChanged database context to 'master'.\n\n", 5701)
Run Code Online (Sandbox Code Playgroud) 我使用ApacheMetaModel到Extract从数据Sybase ASE 15.5 的数据库,Windows 7的计算机上安装.我是在多线程环境中将数据提取到CSV中.我使用这些开源库
<dependency>
<groupId>com.sybase</groupId>
<artifactId>jconn4</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.sybase</groupId>
<artifactId>DDLGen</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.sybase</groupId>
<artifactId>dsparser</artifactId>
<version>4.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我在尝试执行SELECT查询时收到错误.它不会为任何特定查询抛出异常.它可以为任何表抛出异常.我正在尝试使用创建查询Apache Meta-model DataContext.
Query query = dataContext.query().from(table).as("ct").selectAll().toQuery();
dataContext.executeQuery(query).iterator();
Run Code Online (Sandbox Code Playgroud)
上面的代码将创建如下查询:
SELECT ct."Column1", ct."Column2", ct."Column3", ct."Column4", ct."Column5", ct."Column6", ct."Column7", ct."Column8", ct."Column9", ct."id" FROM schemaowner."tablename" ct
Run Code Online (Sandbox Code Playgroud)
以下是堆栈跟踪:
! com.sybase.jdbc4.jdbc.SybSQLException: There is already another cursor with the name 'jconnect_implicit_134' at the nesting level '0'.
!
! at com.sybase.jdbc4.tds.Tds.processEed(Tds.java:4117) ~[jconn4-4.0.jar:JDK 1.6/jdbcmain/Thu Apr 30 04:18:00 PDT 2015]
! at …Run Code Online (Sandbox Code Playgroud) sybase-ase ×10
sql ×6
sybase ×2
cursor ×1
java ×1
jconnect ×1
join ×1
metadata ×1
performance ×1
python ×1
sql-server ×1