Infelizmente, a SAP está abandonando o SQL e atualmente estou escrevendo um utilitário para migrar para o SQL Server. Uma das tabelas que está sendo criada tem uma coluna computada (obtida diretamente dos dados exportados) e o SQL Server lançou um erro
Sintaxe incorreta perto da palavra-chave 'if'
A tabela gerada após alterar os tipos é...
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()
);
Alguma ideia sobre a sintaxe? Não tenho muita certeza de como lidar com isso.
**ATUALIZAR
Para responder a algumas das perguntas, as aspas duplas apareceram com a SQL Anywhere
consulta.
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'
A maioria dessas tabelas foi atualizada a partir de versões anteriores do SQL Anywhere
.
Obrigado pela sua contribuição, agora está funcionando - contornei o "se" com isso...
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
Por alguma razão estranha, ele criou a MS SQL
tabela e então retornou um erro dizendo que ela já existia. Contornou isso com...
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'vTable')
Como mencionado nos comentários, aqui estão algumas correções
Expressão CASE em vez de IF/ELSE
Decimal em vez de float para precisão (isso é opcional, mas é uma prática melhor neste caso). Você pode ajustar
p,s
conforme necessário.Aspas removidas, não sei por que você as usou.
Violino