SQL语法:SQL Server与Teradata

时间:2015-07-12 00:18:54

标签: sql-server teradata database-migration

我多年来一直在使用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上运行。

2 个答案:

答案 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列。最后,复合主键可以是表定义的一部分,如上所示。焦油