遗憾的是,SAP 放弃了 SQL,我目前正在编写一个实用程序来迁移到 SQL Server。正在创建的其中一个表有一个计算列(直接从导出的数据中获取),而 SQL Server 抛出了错误
关键字“if”附近的语法不正确
更改类型后生成的表是......
CREATE TABLE A_Invoices
(
Invoice_ID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
Invoice_No int,
Type varchar(2),
Invoice_Date date,
Transaction_Date date DEFAULT GETDATE(),
Customer_ID int,
Customer_Name varchar(100),
Nominal_ID int,
Add1 varchar(100),
Add2 varchar(200),
City varchar(100),
State varchar(2),
Zip varchar(15),
Terms varchar(100),
Amount_Net float,
Amount_Tax float,
Amount_Gross float,
Tax_Rate float(53),
Tax_Code varchar(2),
Settlement_Due_Days int,
Settlement_Discount_Rate float(53) DEFAULT 0.0,
Settlement_Discount_Amount AS
IF "Settlement_Discount_Rate" > 0
THEN ("Amount_Net"*"Settlement_Discount_Rate") / 100
ELSE 0.0
ENDIF,
Printed varchar(1) DEFAULT 'N',
Posted varchar(1) DEFAULT 'N',
Flag_Prepayment varchar(1) DEFAULT 'N',
Prepayment_Months int DEFAULT 0,
Prepayment_Amount float DEFAULT 0.0,
Flag_Deposit varchar(1) DEFAULT 'N',
Flag_Ad_Hoc varchar(1) DEFAULT 'N',
Customer_Order_No varchar(50),
Details varchar(100),
Pay_Due_Days int DEFAULT 0,
Open_Editing int DEFAULT 0,
Editing_Name varchar(100) DEFAULT 'System',
Updated_Name varchar(100) DEFAULT 'System',
Updated DateTime2 DEFAULT GETDATE()
);
对语法有什么想法吗?不太确定如何处理这个问题。
**更新
为了回答一些问题 - 双引号随查询一起返回SQL Anywhere
。
SELECT c.column_name AS 'Name',
c.base_type_str AS 'Type',
c.nulls AS 'Nulls',
c.`default` AS 'Default'
FROM systabcol c KEY JOIN systab t ON t.table_name = 'vTB'
其中大多数表格都是从早期版本升级而来的SQL Anywhere
。
感谢您的意见,它现在正在工作 - 我通过这个解决了“如果”......
If vComputed = "C" Then
vMSComputed = "Y"
If vDefault.Contains("if") Then
Dim s As New System.Text.StringBuilder(vDefault)
s.Replace("if", "CASE WHEN", 0, 2)
s.Replace("endif", "END", 0, s.Length)
s.Replace("""", "")
vMSDefault = s.ToString
End If
Else
vMSComputed = "N"
End If
由于某种奇怪的原因,它创建了MS SQL
表,然后返回错误,说它已经存在。用以下方法解决了这个问题...
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'vTable')
正如评论中提到的,这里有一些更正
CASE 表达式代替 IF/ELSE
使用十进制而不是浮点数来表示精度(这是可选的,但在这种情况下这是一种更好的做法)。您可以
p,s
根据需要进行调整。删除了引号,不确定您为什么使用它们。
小提琴