标签: sybase

为什么要同时使用 TRUNCATE 和 DROP?

在我工作的系统中有很多使用临时表的存储过程和 SQL 脚本。使用这些表后,最好删除它们。

我的许多同事(几乎所有人都比我更有经验)通常会这样做:

TRUNCATE TABLE #mytemp
DROP TABLE #mytemp
Run Code Online (Sandbox Code Playgroud)

我通常DROP TABLE在我的脚本中使用单个。

在 aTRUNCATE之前立即执行 a 有什么好的理由DROP吗?

sql-server sybase truncate

105
推荐指数
2
解决办法
4万
查看次数

如何在 SQL Server 2008 中找到上次更改登录密码的日期?

我正在将存储过程从 Sybase 15 移植到 SQL Server 2008。

在 Sybase 中,此语句通过向 syslogins.pwdate(密码上次更改的日期)添加天数来计算到期日期,并且工作正常:

SELECT @l_pwd_date = dateadd( day, @l_pwd_max_expire, pwdate)
FROM master.dbo.syslogins
WHERE name = @v_user
Run Code Online (Sandbox Code Playgroud)

...但是在 SQL Server 2008 中尝试编译时抛出此错误:

消息 207,级别 16,状态 1,第 21 行无效的列名“pwdate”。

syslogins 在 SQL Server 2008 中不再包含该列 pwdate。

有谁知道我在哪里可以找到 SQL Server 2008 中的等效列或找到登录密码上次更改日期的解决方法?

sql-server-2008 sybase

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

OLE DB Sybase 连接失败

我有一个连接到我们在 SQL Server 2008R2 数据库中暂存的 Sybase 数据库。我可以连接数据库并且连接测试正常。我正在使用带有 Sybase 驱动程序的 OLE DB 源。

连接管理器

我什至可以预览数据。注意我已经缩小了这个数据集,所以看不到数据,但它仍然表明源确实返回了行。

预览数据集

但是,当我执行包时,它会导致失败。

失败

[来源1 ] 错误:SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“MyDataSource”的 AcquireConnection 方法调用失败,错误代码为 0xC0202009。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。

关于为什么会发生这种情况的任何想法?

更新 添加其他错误消息,尽管它们与有用的相反。[SSIS.Pipeline] 错误:组件“源”(1) 验证失败并返回错误代码 0xC020801C。[SSIS.Pipeline] 错误:一个或多个组件验证失败。错误:任务验证期间出现错误。

更新 几次尝试后,sybase 帐户被锁定。一定与密码有关。

sql-server sybase ssis

8
推荐指数
1
解决办法
1366
查看次数

如何识别具有指向 Sybase 中特定表的外键的表?

我正在寻找(最好)一个 SQL 语句,该语句为任何带有外键的表选择表/和列名到 Sybase 中的给定表。我认为sys...表格应该以某种方式可能,但对 sybase 来说是全新的,我无法理解它。因此,任何朝着正确方向发展的帮助都受到高度赞赏。

编辑:为了完整起见:SELECT @@VERSION返回

'Adaptive Server Enterprise/15.0.3/EBF 17156 ESD#3/P/Sun_svr4/OS 5.8/ase1503/2726/64-bit/FBO/Fri Feb 5 05:26:23 2010'

编辑 2 非常
感谢您的建议,尤其是Andrew Bickerton 的评论。这使我能够构建一个基本的 SQL 选择语句,作为更进一步的起点。

如果其他人对它感兴趣,这里是:

select 
  fko.name    "Foreign key name",
  par.name    "Referenced table name",
  fk1.name || ' -> ' || pk1.name "Reference 1",
  fk2.name || ' -> ' || pk2.name "Reference 2",
  fk3.name || ' -> ' || pk3.name "Reference 3",
  fk4.name || ' -> ' || pk4.name "Reference 4"
from …
Run Code Online (Sandbox Code Playgroud)

sybase referential-integrity

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

何时返回确定性结果,何时返回?

如果你执行这样的语句:

select first field1, field2 from exampleTable where field1 = '1';
Run Code Online (Sandbox Code Playgroud)

然后你会收到这样的警告:

返回的结果是不确定的 SQLCode=122

到目前为止一切正常,因为在这种情况下,您需要一个“order by”子句。

但是当你在 BEGIN END 块中使用相同的语句将值放入一些声明的变量中时,

BEGIN
declare varField1 varchar;
declare varField2 varchar;

select first field1, field2 into varField1, varField2 
from exampleTable 
where field1 = '1';

END
Run Code Online (Sandbox Code Playgroud)

警告没有出现!为什么?

这里不需要“order by”子句吗?这个陈述是突然确定的吗?...

(使用 SQL Anywhere 12)

sybase

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

日期时间小数秒

我正在阅读Sybase ASE 15.7 文档中对datetime数据类型的描述:

datetime 列包含 1753 年 1 月 1 日和 9999 年 12 月 31 日之间的日期。在支持此粒度级别的平台上,日期时间值精确到 1/300 秒。

我觉得上面的内容很混乱。首先,这是唯一添加了“在支持这种粒度级别的平台上”警告的数据类型。这究竟是什么意思,我如何确定我的平台是否是“支持这种粒度级别”的平台之一?

此外,我不清楚能够有效地准确存储 1/300 秒意味着什么。我正在使用 JDBC 访问数据库,其中唯一合理的类型是java.sql.Timestamp。这种类型允许我检索到纳秒的精度。但考虑到在一般情况下,除以 300 需要十进制系统中的无限位数,实际上需要小数纳秒(具有无限十进制数字)来保持表示为 1/300 秒的值。所以,这意味着我无法在不损失一些精度的情况下获取存储在服务器中的值,但可以忽略不计。

最后,当我执行以下查询时:

SELECT convert(char(32), submission_date, 139) FROM some..table
Run Code Online (Sandbox Code Playgroud)

我看到如下值:

Jan  6 2014 12:36:12.420000     
Sep 12 2013 13:44:57.100000     
Sep 10 2014 13:47:02.240000     
Sep 10 2014 13:47:07.850000     
Sep 10 2014 13:47:13.346000     
Sep 10 2014 13:47:19.033000     
Sep 10 2014 13:47:24.533000     
Sep 10 2014 13:47:30.030000     
Sep 10 2014 13:47:35.636000 …
Run Code Online (Sandbox Code Playgroud)

sybase jdbc sybase-ase sybase-ase-15.7

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

使用索引分析工具调优查询和索引

我已经从几个地方指出这个脚本,这显然有助于在 Microsoft SQL Server 中设计索引:http : //indexanalysis.codeplex.com/

问题是我使用的是 Sybase ASA 11,它使用的 T-SQL 实现似乎与 MS 使用的略有不同。当我尝试运行脚本时出现各种错误。

我对数据库调优有足够的了解,可以告诉在哪里放置索引,仅此而已。我是一名程序员,所以我不太了解它。

我的问题是: 有没有类似于 Sybase 的这个工具的东西?我需要知道将索引放在哪里,而不必进行每个查询(如果可以避免的话)。

index sybase database-tuning

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

将逗号分隔的字符串字段拆分/分解为 SQL 查询

我有场 id_list='1234,23,56,576,1231,567,122,87876,57553,1216'

我想用它来搜索IN这个领域:

SELECT * 
FROM table1
WHERE id IN (id_list)
Run Code Online (Sandbox Code Playgroud)
  • idinteger

  • id_listvarchar/text

但是这样就行不通了,所以我需要以某种方式拆分id_list为选择查询。

我应该在这里使用什么解决方案?我正在使用 T-SQL Sybase ASA 9 数据库 (SQL Anywhere)。但是这样就行不通了,所以我需要以某种方式拆分id_list为选择查询。

我看到的方式是使用while循环创建自己的函数,并根据分隔符位置搜索拆分每个元素提取,然后将元素插入到临时表中,该函数将作为结果返回。


对 Sebastian Meine 回答及其解决方案的评论:

Sybase SQL Anywhere 9

  • sa_split_list 系统程序在这里不存在,所以它不起作用

  • CAST 效果很好

Sybase SQL Anywhere 12

  • sa_split_list 系统程序存在并且运行良好

  • CAST 效果很好

对于 Sybase SQL Anywhere 9,我进行了 sa_split_list 系统过程替换:

CREATE PROCEDURE str_split_list(in str long varchar, in delim char(10) default ',')
RESULT(
  line_num integer,
  row_value long varchar)
BEGIN
  DECLARE str2 …
Run Code Online (Sandbox Code Playgroud)

sybase t-sql sybase-sql-anywhere string-splitting

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

如何在 Linux 上通过 ODBC 配置从 Sybase IQ 访问 Sybase Anywhere 的连接

我正在尝试通过 ODBC 驱动程序从 IQ16 访问 ASA16 服务器。两台服务器都安装在同一个 Linux 机器上。

我已经安装unixodbc-bin并添加了一个文件 .odbc.init 到运行数据库的用户的家中:

[mes_input]
Driver=/opt/sqlanywhere16/lib64/libdbodbc16_r.so
uid=dba
pwd=SQL
EngineName=mes_input
CommLinks=tcpip(host=127.0.0.1;port=49152)
AutoStop=no
DatabaseName=mes_input
Run Code Online (Sandbox Code Playgroud)

ASA 在那个盒子上的 49152 上运行;IQ 运行默认值 2638。

另外,我在接口文件锁定中添加了一个条目,如下所示:

mes_input
        master tcp ether myserver 49152
        query tcp ether myserver 49152
Run Code Online (Sandbox Code Playgroud)

回到 IQ,我可以通过 Sybase Central 添加远程服务器以及此框中的表。还测试连接并显示没有错误。

但是当我现在尝试通过例如从 ASA 复制一些数据时

INSERT locale_table LOCATION 'mes_input.mes_input' 'SELECT * FROM table'
Run Code Online (Sandbox Code Playgroud)

我越来越:

Connectivity libraries cannot be found (check your dynamic library
search path).  Selects from attached databases are not possible without
these libraries.  
-- (hqmlib/hqm_cpm.cxx …
Run Code Online (Sandbox Code Playgroud)

sybase odbc sybase-sql-anywhere sybaseiq

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

Postgresql - Sybase 概念对应

下图很好地描述了 PostgreSQL 的主要概念:

在此处输入图片说明

我发现自己必须使用 Sybase ASE 15,我想知道 Sybase 中有哪些类似的概念。例如,从我目前所了解的情况来看,Sybase 缺乏模式的概念。所以一些问题是:

  • Sybase ASE 15 有模式的概念吗?
  • 参照完整性约束的边界是什么?例如,在 PostgreSQL 中,您可以跨模式(但不能跨数据库)使用外键。Sybase ASE 15 是什么情况?

sybase

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