AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79419061
Accepted
gchq
gchq
Asked: 2025-02-07 02:59:58 +0800 CST2025-02-07 02:59:58 +0800 CST 2025-02-07 02:59:58 +0800 CST

创建表计算值

  • 772

遗憾的是,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')
sql
  • 1 1 个回答
  • 57 Views

1 个回答

  • Voted
  1. Best Answer
    samhita
    2025-02-07T07:57:26+08:002025-02-07T07:57:26+08:00

    正如评论中提到的,这里有一些更正

    • CASE 表达式代替 IF/ELSE

    • 使用十进制而不是浮点数来表示精度(这是可选的,但在这种情况下这是一种更好的做法)。您可以p,s根据需要进行调整。

    • 删除了引号,不确定您为什么使用它们。

        CREATE TABLE A_Invoices
    (
        Invoice_ID int NOT NULL IDENTITY(1,1) ,
        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 decimal(18, 2), 
        Amount_Tax decimal(18, 2), 
        Amount_Gross decimal(18, 2), 
        Tax_Rate decimal(18, 2), 
        Tax_Code varchar(2), 
        Settlement_Due_Days int, 
        Settlement_Discount_Rate decimal(18, 2) DEFAULT 0.0, 
        Settlement_Discount_Amount AS 
            CASE 
                WHEN Settlement_Discount_Rate > 0 
                THEN (Amount_Net * Settlement_Discount_Rate) / 100 
                ELSE 0.0 
            END, 
        Printed varchar(1) DEFAULT 'N', 
        Posted varchar(1) DEFAULT 'N', 
        Flag_Prepayment varchar(1) DEFAULT 'N', 
        Prepayment_Months int DEFAULT 0, 
        Prepayment_Amount decimal(18, 2) 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 SYSDATETIME()
        CONSTRAINT PK_A_Invoices_Invoice_ID PRIMARY KEY (Invoice_ID)
    
    );
    
    

    小提琴

    • 1

相关问题

  • 更新除某些列上具有相同值的行之外的所有行

  • 当我返回 sql 列时,有没有办法只反转数字?(希伯来语)

  • 布尔值之间的 SQL less/greater 比较会产生意外结果

  • 如何根据数组中的匹配更新 Postgres 表中的值

  • 如何在sql server中对列求和

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve