我多年来一直在使用SQL Assistant查询Teradata服务器,但现在必须使用SQL Server。几个小时以来,我一直在绊倒我的代码,很难搞清楚哪些语法需要更新。
有没有人知道转换逻辑的好资源?
这是一个例子 - 我正在将.txt数据加载到临时表中:
在Teradata中,以下作品:
$.post(document.location.url, $(this).serialize(), function(data){
if(data.success) {
$('#form-feedback-success').fadeIn(1500);
}
else {
$('#form-feedback-error').fadeIn(1500);
}
});
在SQL Server中,我能够完成以下工作:
CREATE MULTISET TABLE USER_WORK.TABLE1 (
VAR1 CHAR(3)
,VAR2 CHAR(5)
,VAR3 DECIMAL(12,2) )
PRIMARY INDEX (VAR1, VAR2);
(主要区别:No" Multiset&#34 ;;所有变量读入VARCHAR&并且我不能使任何长度短于20的工作;我无法弄清楚如何定义功能索引)
大多数人想知道在迁移逻辑时是否存在某种模式 - 必须查找每一段失败的代码都很痛苦,并且要解决它实际上会在SQL Server上运行。
答案 0 :(得分:1)
几点......
SQL Server尝试中的#前缀定义了一个本地临时表。它仅对您的会话可见,并且在会话结束时会消失。我认为它类似于Teradata中的VOLATILE
表。那是你想要的吗?
默认情况下,SQL Server表为MULTISET
,因此SQL没有等效的关键字。
如果您遇到CHAR
列大小的问题,则很可能是其他地方的语法错误。使用单字节字符集,CHAR
列的长度可以是1到8,000个字符。
SQL Server没有PRIMARY INDEX
。据我了解,SQL Server中的等价物是CLUSTERED
index。
因此,您在SQL Server中的确切表结构将是这样的:
CREATE TABLE USER_WORK.TABLE1 (
VAR1 CHAR(3)
,VAR2 CHAR(5)
,VAR3 DECIMAL(12,2));
对于索引(名称可以是您想要的任何名称):
CREATE CLUSTERED INDEX TABLE1_FOO ON USER_WORK.TABLE1(VAR1, VAR2);
答案 1 :(得分:0)
您也可以在sql server中创建完全相同的模式,但语法会有所不同。
我会翻译您的teradata表格如下:
CREATE TABLE TABLE1
( VAR1 CHAR(3) NOT NULL
,VAR2 CHAR(5) NOT NULL
,VAR3 DECIMAL(12,2)
,PRIMARY KEY (VAR1, VAR2)
);
GO
对于VAR1和VAR2列,您仍然可以使用CHAR(3)和CHAR(5)数据类型,但是必须使它们成为非可空列,因为它们将成为主键列(sql server中的要求)。
Sql server也有数据类型decimal(12,2),您可以将它用于VAR3列。最后,复合主键可以是表定义的一部分,如上所示。焦油