标签: sybase

已经连接时,isql 是否有 -w 等效项?

sybase isql 中的默认输出(文本)宽度为 80。-w当在命令行上启动 isql 时,可以使用标志更改它:

isql -w 200 -S... -U... -P...
Run Code Online (Sandbox Code Playgroud)

现在,我想知道当我已经连接时是否有可能更改文本宽度。我会期待类似的东西

1> set columnwidth 200
2> go
Run Code Online (Sandbox Code Playgroud)

或类似的东西。然而,在文档中我无法找到这个方向的东西。那么,这是否意味着这是不可能的,还是我找错了地方?

sybase isql

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

固定值字段的外键约束

注意:我是开发人员...

我有一个资产表,其中包含许多代码,这些代码是进入第二个表 OutlineFiles 的外键。OutlineFiles 表将类型和代码作为主键。外键约束需要看起来像这样......

ALTER TABLE "dbo"."Assets" 
ADD CONSTRAINT "Locations" FOREIGN KEY ( "LN", "LocationCode" ASC ) 
REFERENCES "dbo"."OutlineFiles" ( "Type", "Code" );

ALTER TABLE "dbo"."Assets" 
ADD CONSTRAINT "CostCentre" FOREIGN KEY ( "CC", "CostCentreCode" ASC ) 
REFERENCES "dbo"."OutlineFiles" ( "Type", "Code" );
Run Code Online (Sandbox Code Playgroud)

因此,将通过“LN”和“CC”的固定值与轮廓表建立关系。或者将数据库更改为有两个表并删除 OutlineFiles 表上的 Type 列会更容易吗?我正在 Sybase 中尝试这个,但我们支持许多数据库。

foreign-key sybase odbc

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

sybase 格式日期时间 yyyymmdd

这似乎是一件微不足道的事情很容易,但我找不到一个好的方法来做到这一点。

这就是我想出的:

select convert(numeric,
                    (select convert(varchar,datepart(yy,getdate())) + 
                         right('0' + convert(varchar,datepart(mm,getdate())), 2) +
                         right('0' + convert(varchar,datepart(dd,getdate())), 2)
                    ))
Run Code Online (Sandbox Code Playgroud)

编辑:我知道它不需要这样的子查询,但忽略 =p

sybase date-format

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

Sybase 如何存储日期时间信息?

我们有一个 Sybase 数据库,当前在某些表中存储日期时间值。如果我们将装有 Sybase 数据库的服务器移动到位于另一个时区的另一个国家/地区,数据库中的日期时间值是否会以不同的方式表示?

换句话说,请考虑以下场景:

Sybase 数据库在时区 +2:00 运行。

从我位于时区 +1:00 的 Java 应用程序中,它将 1970 年 1 月 1 日 1:00 写入数据库,这是应用程序时区中的纪元 0。

preparedStatement.setTimestamp(3, new Timestamp(0));
Run Code Online (Sandbox Code Playgroud)

但是,当我使用 SQL Workbench/J 客户端(时区 +1:00)查询数据库时,我看到

1970-01-01 01:00:00
Run Code Online (Sandbox Code Playgroud)

在我的桌子上。事实上,无论我将计算机时钟更改为哪个时区,SQL Workbench/J 客户端始终1970-01-01 01:00:00从数据库中读取数据。

位于时区 +3:00 的另一个 Java 客户端读取的值与

1970-01-01 01:00:00
Run Code Online (Sandbox Code Playgroud)

翻译为纪元-7200000-2:00客户的时区!

那么回到我原来的问题,Sybase 是否将日期时间值存储为字符串或纪元?我没有可以进行实验的免费 Sybase 服务器,那么当我们将服务器移动到另一个时区不同的国家/地区时,我们会发生什么情况呢?

我们使用的类型是“datetime”,例如:

CREATE TABLE "dbo"."whatever" (eventDate datetime NOT NULL);
Run Code Online (Sandbox Code Playgroud)

sybase jdbc java timezone datetime

4
推荐指数
1
解决办法
5455
查看次数

按 GETSOTED 排序

在我的 sybase 12 中,当我查看 select distinct 查询GETSORTED的 showplan 时,我看到了 showplan 的输出。

我已经搜索了整个互联网(是的!),但似乎找不到一个链接来说明实际对数据进行排序的顺序GETSORTED

我有理由相信它对不同行的列中数据的大小进行排序,对于相同长度的行,它按字母顺序排序。

执行计划:

W (5):     STEP 1
   W (6):         The type of query is INSERT.
   W (7):         The update mode is direct.
   W (8):         Worktable1 created, in allpages locking mode, for DISTINCT.
   W (9): 
   W (10):         FROM TABLE
   W (11):             tablename
   W (12):         Nested iteration.
   W (13):         Table Scan.
   W (14):         Forward scan.
   W (15):         Positioning at start of table.
   W (16):         Using …
Run Code Online (Sandbox Code Playgroud)

sybase order-by select

4
推荐指数
1
解决办法
171
查看次数

我们如何限制 SQL Server 上特定用户或查询的 tempdb 使用?

在我们的 SQL Server 生产环境中,一些用户运行临时查询,将大量数据提取到 tempdb 中并将其填满,从而导致生产服务器出现问题。当这些报告/查询从前端运行时,它们有时会弄乱将数百万行拉到临时表的日期范围。是的,用户需要接受教育,也需要调整,我们已经这样做了,但他们仍然偶尔会产生问题。

现在他们说在 SAP ASE (Sybase) 中有一个功能可以创建多个 tempdb 和重定向用户并限制使用,通过不膨胀单个 tempdb(就像在 SQL Server 中一样)并使服务器停机。

我们在 SQL Server 中有这样的东西吗?

sql-server sybase tempdb sql-server-2016

4
推荐指数
1
解决办法
275
查看次数

解决 NOT IN NULL 问题的最佳方法?

有很多解释为什么 NOT IN NULL 不起作用,但我没有看到任何解决方案。(最近的问题在这里:为什么 NOT IN 包含 NULL 的集合总是返回 FALSE/NULL?

我有 6 个存储过程的可选参数,用于过滤查询的某个值。以前的开发人员做了这样的事情:

IF @var1 IS NULL AND ..... 

    select ...

else

    select ...
    where value in (@var1, ...)
Run Code Online (Sandbox Code Playgroud)


我不是特别喜欢这个。(查询非常庞大),所以我决定选择这样的东西:(
无论如何,我们在临时表中得到了结果)

IF @var IS NOT NULL OR ...

    delete from #temp where value not in (@var1,...)
Run Code Online (Sandbox Code Playgroud)


但我意识到这行不通。

我唯一能想到的就是创建另一个临时表,该表将只保存@var1 等中的非空值(使用 if 语句或删除 where 为 NULL),然后对该表进行连接删除。

有没有更好的办法?

null stored-procedures sybase except

3
推荐指数
1
解决办法
5645
查看次数

使用 SyBase 将数据从一个数据库导入和导出到另一个数据库需要很长时间

为了更新数据库(Sybase Adaptive Server Anywhere 8),我从客户端计算机上的一个数据库中获取所有数据并使用

SELECT * FROM tabelName OUTPUT TO 'C:\path' FORMAT ASCII DELIMITED BY ';';
Run Code Online (Sandbox Code Playgroud)

然后我使用这些文件来更新另一个连接到服务器的数据库,方法是制作临时表,检查是否缺少任何内容,然后删除临时表。

INPUT INTO tempTable FROM 'C:\path' FORMAT ASCII DELIMITED BY ';';

INSERT INTO mainTable 
SELECT * 
FROM tempTable 
WHERE id NOT IN (SELECT id FROM mainTable);

DROP TABLE tempTable;
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有更好的方法来做到这一点,因为两个表需要很长时间来导出和导入数据(尽管它们确实有大量的列和数据,但仍然和大量的数据我的意思是〜100列和约 100,000 行)。这尤其奇怪,因为另一个具有相似数据量的表通过得非常快(尽管它的列确实较少)。需要一段时间的两个表每秒读取约 1000 个数据,而其他表要快得多。

每个客户的笔记本电脑上都有 database.db 文件。他们获取了一些数据并需要提交它但没有连接,因此他们使用自己的 .db 文件并稍后更新服务器上的文件。

获取 SQL 定义可能很困难,因为表是在前一段时间制作的,我不知道如何获取它们。目标数据库是保存所有数据的数据库,而源数据库是未连接且可在需要时离线使用的数据库。

一些建议,提示将不胜感激。

export sybase import sybase-sql-anywhere

3
推荐指数
1
解决办法
2392
查看次数