Access与SQL Server语法对比详解

需积分: 7 2 下载量 194 浏览量 更新于2024-09-08 收藏 76KB DOC 举报
"这篇文档详细对比了Access与SQL Server在语法上的差异,包括系统时间获取、连接字符串、字段类型转换、日期格式等方面。" 在数据库管理领域,Access和SQL Server都是常用的数据库系统,但它们在SQL语法上存在一些显著的区别。以下是针对这些差异的详细解释: 1. 系统时间获取: - Access使用`Date()`函数获取当前系统日期,而SQL Server使用`GETDATE()`函数。 2. 连接字符串: - 在Access中,字符串连接使用`&`运算符,例如 `string1 & string2`。 - SQL Server中,字符串连接通常使用`+`运算符,如 `string1 + string2`。 3. 截取字符串: - Access中的`Mid()`函数用于截取字符串,如 `Mid(string, start, length)`。 - SQL Server中,对应的函数是`SUBSTRING()`, 如 `SUBSTRING(string, start, length)`。 4. 大小写转换: - Access提供`LCase()`和`UCase()`函数将字符串转为小写和大写。 - SQL Server则有`LOWER()`和`UPPER()`函数实现相同功能。 5. 条件取值: - Access使用`IIF()`函数进行条件判断,如 `IIF(condition, true_value, false_value)`。 - SQL Server则采用`CASE WHEN ... THEN ... ELSE ... END`结构。 6. 字段类型转换: - Access通过`CStr()`, `CInt()`, `CDate()`等函数转换字段类型。 - SQL Server中,可以使用`CONVERT()`或`CAST()`函数进行转换。 7. SELECT, UPDATE语句的区别: - 单表操作时,Access和SQL Server的`SELECT`和`UPDATE`语句基本相同。 - 多表操作的`UPDATE`语句,SQL Server使用`FROM`子句,如 `UPDATE Table1 SET a.Name = b.Name FROM Table1 a, Table2 b WHERE a.ID = b.ID;` - Access的`UPDATE`语句不包含`FROM`子句,所有表都列在`UPDATE`关键字之后,如 `UPDATE Table1 a, Table2 b SET a.Name = b.Name WHERE a.ID = b.ID;` 8. DELETE语句: - SQL Server的`DELETE`语句格式为 `DELETE FROM <表名> WHERE ID > 1;` - Access的`DELETE`语句需要包含`*`,如 `DELETE * FROM <表名> WHERE ID > 1;` 9. AS后面计算字段的区别: - SQL Server中,`AS`后的字段不能直接参与计算,如 `SELECT SUM(num) AS sum_num, SUM(num) * num AS all_num FROM <表名>;` - Access允许`AS`后的字段参与计算,如 `SELECT SUM(num) AS sum_num, sum_num * num AS all_num FROM <表名>;` 10. 日期/时间字段和分隔符: - SQL Server使用单引号 `'` 包围日期,如 `WHERE RegDate = '2011-08-10'`。 - Access使用`#`号分隔日期,如 `WHERE 生日 = #2011-08-10#`。 了解这些差异有助于在从Access迁移至SQL Server,或者反之的过程中编写兼容的SQL语句,避免出现语法错误。
2023-07-13 上传
2023-05-30 上传

编译报错 CREATE OR REPLACE PROCEDURE get_dev_cs IS sql_tem VARCHAR2(4000); v_dt NUMBER; BEGIN ----om_subscriber_yyyymm sql_tem := 'truncate table ycyd.Subscriber_cs'; EXECUTE IMMEDIATE sql_tem; FOR v_dt IN (SELECT to_number(substr(table_name, '15')) db FROM sys.all_tables a WHERE a.owner = upper('jour1') AND a.table_name LIKE upper('om_subscriber_202___') AND substr(table_name, '15') > 202205) LOOP -- 循环往b里添加数据 sql_tem := ' INSERT INTO ycyd.Subscriber_cs SELECT a.order_id, a.done_date, a.cust_id, a.subscriber_ins_id, a.access_num FROM jour1.om_subscriber_' || v_dt.db || ' a WHERE a.action = 0 AND a.is_usim = 1'; -- 执行sql EXECUTE IMMEDIATE sql_tem; END LOOP; ----om_order_yyyymm sql_tem := 'truncate table ycyd.order_cs'; EXECUTE IMMEDIATE sql_tem; COMMIT; FOR v_dt IN (SELECT to_number(substr(table_name, '15')) db FROM sys.all_tables a WHERE a.owner = upper('jour1') AND a.table_name LIKE upper('om_subscriber_202___') AND substr(table_name, '15') > 202205) LOOP -- 循环往b里添加数据 sql_tem := ' INSERT INTO ycyd.order_cs SELECT order_id, dev_id FROM JOUR1.om_order_' || v_dt.db || ' b'; -- 执行sql EXECUTE IMMEDIATE sql_tem; END LOOP; COMMIT; ---dev sql_tem := 'truncate table ycyd.yd_order_dev_3056'; EXECUTE IMMEDIATE sql_tem; -- 添加数据 sql_tem := ' INSERT INTO ycyd.yd_order_dev_3056 SELECT a.order_id, a.done_date, a.cust_id, a.subscriber_ins_id, a.access_num, c.dev_id, c.dev_name, d.code, c.dev_busi_code, c.corp_org, c.company_name, c.department_code, c.department_name, c.remarks FROM ycyd.Subscriber_cs a LEFT JOIN ycyd.order_cs b ON a.order_id = b.order_id LEFT JOIN params1.sec_developer c ON b.dev_id = c.dev_id LEFT JOIN (SELECT DISTINCT oo.code,s.bill_id FROM params1.sec_operator oo, params1.sec_staff s WHERE s.staff_id = oo.staff_id AND oo.state = 1 AND oo.staff_id NOT in ('123402933','123395474','123404209')) d ON c.dev_phone = d.bill_id WHERE c.corp_org = 3056'; -- 执行sql EXECUTE IMMEDIATE sql_tem; COMMIT; END get_dev_cs;

2023-07-14 上传
2023-07-13 上传