在我工作的系统中有很多使用临时表的存储过程和 SQL 脚本。使用这些表后,最好删除它们。
我的许多同事(几乎所有人都比我更有经验)通常会这样做:
TRUNCATE TABLE #mytemp
DROP TABLE #mytemp
Run Code Online (Sandbox Code Playgroud)
我通常DROP TABLE
在我的脚本中使用单个。
在 aTRUNCATE
之前立即执行 a 有什么好的理由DROP
吗?
我正在将存储过程从 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 2008R2 数据库中暂存的 Sybase 数据库。我可以连接数据库并且连接测试正常。我正在使用带有 Sybase 驱动程序的 OLE DB 源。
我什至可以预览数据。注意我已经缩小了这个数据集,所以看不到数据,但它仍然表明源确实返回了行。
但是,当我执行包时,它会导致失败。
[来源1 ] 错误:SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“MyDataSource”的 AcquireConnection 方法调用失败,错误代码为 0xC0202009。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。
关于为什么会发生这种情况的任何想法?
更新 添加其他错误消息,尽管它们与有用的相反。[SSIS.Pipeline] 错误:组件“源”(1) 验证失败并返回错误代码 0xC020801C。[SSIS.Pipeline] 错误:一个或多个组件验证失败。错误:任务验证期间出现错误。
更新 几次尝试后,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) 如果你执行这样的语句:
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 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) 我已经从几个地方指出这个脚本,这显然有助于在 Microsoft SQL Server 中设计索引:http : //indexanalysis.codeplex.com/
问题是我使用的是 Sybase ASA 11,它使用的 T-SQL 实现似乎与 MS 使用的略有不同。当我尝试运行脚本时出现各种错误。
我对数据库调优有足够的了解,可以告诉在哪里放置索引,仅此而已。我是一名程序员,所以我不太了解它。
我的问题是: 有没有类似于 Sybase 的这个工具的东西?我需要知道将索引放在哪里,而不必进行每个查询(如果可以避免的话)。
我有场 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)
id
是 integer
id_list
是 varchar/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 系统过程替换:
Run Code Online (Sandbox Code Playgroud)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 …
我正在尝试通过 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) 下图很好地描述了 PostgreSQL 的主要概念:
我发现自己必须使用 Sybase ASE 15,我想知道 Sybase 中有哪些类似的概念。例如,从我目前所了解的情况来看,Sybase 缺乏模式的概念。所以一些问题是:
sybase ×10
sql-server ×2
index ×1
jdbc ×1
odbc ×1
ssis ×1
sybase-ase ×1
sybaseiq ×1
t-sql ×1
truncate ×1