我正在将SQL从Teradata转换为SQL Server
在Teradata,他们有格式
SELECT col1, col2
FROM table1
INTO @variable1, @variable2
Run Code Online (Sandbox Code Playgroud)
在SQL Server中,我找到了
SET @variable1 = (
SELECT col1
FROM table1
);
Run Code Online (Sandbox Code Playgroud)
这只允许每个语句使用一个列/变量.如何使用单个SELECT语句分配2个或更多变量?
我刚刚开始使用Teradata,我在Teradata遇到了一个名为"Rows unbounded preceding"的Ordered Analytical Function.我尝试了几个网站来了解这个功能,但是所有这些网站都使用了一个复杂的例子来解释它.能否请你给我一个天真的例子,以便我能清楚地了解基础知识.
我试图比较来自相同ID的两个地址,看看它们是否匹配.例如:
Id Adress Code Address
1 1 123 Main
1 2 123 Main
2 1 456 Wall
2 2 456 Wall
3 1 789 Right
3 2 100 Left
Run Code Online (Sandbox Code Playgroud)
我只想弄清楚每个ID的地址是否匹配.所以在这种情况下,我想只返回ID 3作为地址代码1和2的不同地址.
我对pdo_odbc和PDO :: FETCH_OBJ(以及PDO :: FETCH_CLASS)有一个奇怪的问题,导致以下错误消息:
PHP Fatal error: Cannot access empty property
Run Code Online (Sandbox Code Playgroud)
这是代码:
$dbh = new PDO("odbc:FOO");
$sth = $dbh->query("
SELECT rolename
FROM dbc.allrolerights
WHERE databasename = 'BAR'
");
$result = $sth->fetch(PDO::FETCH_OBJ);
Run Code Online (Sandbox Code Playgroud)
作为参考,FOO DSN是使用tdodbc软件包提供的tdata.so驱动程序的Teradata数据源.
我相信这种情况正在发生,因为当PDO调用zend_API.h:object_init_ex()来实例化stdClass对象时,字段名称(从ODBC查询返回)是空白的.如果我切换到PDO :: FETCH_LAZY和var_dump()行,我得到以下内容:
object(PDORow)#3 (2) {
["queryString"]=>
string(95) "
SELECT rolename
FROM dbc.allrolerights
WHERE databasename = 'BAR'
"
[""]=>
string(30) "FNAR "
}
Run Code Online (Sandbox Code Playgroud)
这似乎支持它.我已经尝试了几种不同的PDO属性组合和一堆不同的角度来解决这个问题.一种解决方案是获取关联数组并将其传递给类构造函数.但是,这对于在幕后直接使用PDO :: FETCH_CLASS的某些框架和ORM不起作用.
我想补充一点,其他fetch方法似乎做对了,例如,PDO :: FETCH_NAMED:
array(1) {
["RoleName"]=>
string(30) "FNAR "
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找可以放在PDO dbh或sth定义中的东西,或者用于数据源或驱动程序的odbc.ini或odbcinst.ini来解决此问题.先感谢您.
更新: odbc_fetch_object()(即不是PDO)与完全相同的一切都很好.只是想提一下.显然,PHP,unixODBC或ODBC驱动程序似乎没有任何严重问题.它是PDO代码中的一部分.是时候打开一个错误报告...... 打开了
$dbh = odbc_connect("FOO", NULL, NULL) …
Run Code Online (Sandbox Code Playgroud) 所以我有一个查询需要SELECT中的一堆CASE语句.这不是原始设计,而是妥协的一部分.
所以查询看起来像这样:
SELECT
CONT.TABLE.FINC_ACCT_NM,
CONT.TABLE.FINC_ACCT_ID,
CONT.TABLE.CURR_END_OF_PERD_ACTL_VAL,
CONT.TABLE.PREV_END_OF_PERD_ACTL_VAL,
CONT.TABLE.VARNC_PLAN_VAL,
CONT.TABLE.OUTLOOK_BDGT_PLAN_VAL,
CONT.TABLE.PERD_END_RPT_DT,
CONT.TABLE.PLAN_VERS_NM,
CONT.TABLE.FRMT_ACTL_CD,
CONT.TABLE.FRMT_PLAN_CD,
CONT.TABLE.RPT_PERD_TYPE_CD,
CASE
WHEN ( CONT.TABLE.FINC_ACCT_ID )= 'XXXX' and ( CONT.TABLE.BAL_TYPE_CD ) = 'EOP' then ' Net Interest Income'
WHEN ( CONT.TABLE.FINC_ACCT_ID )= 'XXXX' and ( CONT.TABLE.BAL_TYPE_CD ) = 'EOP' then ' Non Interest Income'
WHEN ( CONT.TABLE.FINC_ACCT_ID )= 'XXXX' and ( CONT.TABLE.BAL_TYPE_CD ) = 'EOP' then 'Non-Interest Expense'
WHEN ( CONT.TABLE.FINC_ACCT_ID )= 'XXXX' and ( CONT.TABLE.BAL_TYPE_CD ) = 'EOP' then ' Total Marketing Expense'
WHEN ( CONT.TABLE.FINC_ACCT_ID …
Run Code Online (Sandbox Code Playgroud) 我的问题类似于这个SQL操作顺序,但有一点点扭曲,所以我认为这是公平的.
我正在使用Teradata.我有2张桌子: table1
, table2
.
table1
只有一id
列.
table2
有以下栏目:id
,val
我可能错了,但我认为这两个陈述给出了相同的结果.
声明1.
SELECT table1.id, table2.val
FROM table1
INNER JOIN table2
ON table1.id = table2.id
WHERE table2.val<100
Run Code Online (Sandbox Code Playgroud)
声明2.
SELECT table1.id, table3.val
FROM table1
INNER JOIN (
SELECT *
FROM table2
WHERE val<100
) table3
ON table1.id=table3.id
Run Code Online (Sandbox Code Playgroud)
我的问题是,查询优化器是否足够聪明
- 首先执行WHERE子句然后在语句1中稍后加入
- 知道语句2中实际上不需要表3
我对SQL很新,所以如果我误解了什么,请教育我.
我正在使用Teradata.在那里我得到'数据库中没有更多的虚拟空间'.我的数据库利用率为85%.此错误与数据库利用率之间是否存在任何关系?任何有关这方面的研究都会对我解决这个问题更有帮助.分享你的想法,以避免这种情况.
我正在尝试使用PyODBC在Python中查询Teradata数据库.与数据库的连接建立得很好; 但是,当我尝试获取结果时,我遇到了这个错误"无效的文字为十进制:你''".请帮忙.
我在RHEL6上,使用Python 2.7.3
这是代码和结果:
import pyodbc
sql = "select * from table"
pyodbc.pooling = False
cnx = pyodbc.connect("DRIVER={Teradata};DBCNAME=host;DATABASE=database; AUTHENTICATION=LDAP;UID=user;PWD=password", autocommit=True, ANSI=True)
cursor = cnx.cursor()
rows = cursor.execute(sql).fetchone()
Run Code Online (Sandbox Code Playgroud)
InvalidOperation Traceback (most recent call last)
<ipython-input-25-f2a0c81ca0e4> in <module>()
----> 1 test.fetchone()
/usr/local/lib/python2.7/decimal.pyc in __new__(cls, value, context)
546 context = getcontext()
547 return context._raise_error(ConversionSyntax,
--> 548 "Invalid literal for Decimal: %r" % value)
549
550 if m.group('sign') == "-":
/usr/local/lib/python2.7/decimal.pyc in _raise_error(self, condition, explanation, *args)
3864 # Errors should only be risked …
Run Code Online (Sandbox Code Playgroud) 我想用c#连接到Teradata.我正在使用本网站的示例代码
using System;
using System.Collections.Generic;
using System.Text;
using Teradata.Client.Provider;
namespace Teradata.Client.Provider.HelloWorld
{
class HelloWorld
{
static void Main(string[] args)
{
using (TdConnection cn = new TdConnection("Data Source = x;User ID = y;Password = z;"))
{
cn.Open();
TdCommand cmd = cn.CreateCommand();
cmd.CommandText = "SELECT DATE";
using (TdDataReader reader = cmd.ExecuteReader())
{
reader.Read();
DateTime date = reader.GetDate(0);
Console.WriteLine("Teradata Database DATE is {0}", date);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
(我也试过DSN , UID , PWD
但是,我的异常,我的用户ID,帐户或密码不正确 ...但我能够轻松地使用SQL助手登录.所以,我排除了不正确的用户ID或密码
在这里,我找到了解决问题的可能方案, 但我不知道在示例代码中需要更改的内容.
所以,我不知道如何实现该解决方案. …
我在Windows 7上安装了python 2.7.0和Teradata模块.我无法从python连接和quyey TD.
__PRE__
现在我想使用Python导入teradata模块并执行如下操作:
请帮我编写代码,因为我是Python新手,并且我没有可用的信息来连接到teradata.
teradata ×10
sql ×5
odbc ×2
python ×2
c# ×1
connection ×1
database ×1
join ×1
matching ×1
pdo ×1
performance ×1
php ×1
rows ×1
sql-server ×1