SQL Server 2008基础教程:理解Transact-SQL语言

需积分: 0 0 下载量 171 浏览量 更新于2024-08-15 收藏 1.93MB PPT 举报
"超出数据范围的溢出错误-SQL Server 2008基础教程-05." 在SQL Server 2008中,超出数据范围的溢出错误通常发生在尝试存储或计算的数据值超过了特定数据类型的允许范围。例如,如果你试图将一个大于int类型最大值(2,147,483,647)的数值存入int类型的字段,就会遇到此类错误。这是由于数据类型的限制,导致数据无法正确存储,从而引发溢出。 本章主要介绍了Transact-SQL(T-SQL),它是SQL Server中用于管理和操作数据库的主要语言。T-SQL是SQL标准的一个扩展,由微软公司实现,提供了更丰富的功能和更具体的数据库操作语法。 1. Transact-SQL与SQL的关系:Transact-SQL是SQL的一个方言,遵循SQL标准,但增加了更多用于数据库管理和应用程序开发的特性,如过程化编程、异常处理、事务控制等。 2. T-SQL的特点和执行方式:T-SQL支持批处理,可以一次性执行多条SQL语句,还包含了控制流语句(如IF-ELSE、WHILE循环)以及用户定义的函数和存储过程,使得数据库操作更为灵活。 3. 数据定义语言(DDL):用于创建、修改和删除数据库对象,如表、视图、索引等。例如,CREATE TABLE语句用于创建新表,ALTER TABLE用于修改已存在的表结构,DROP TABLE用于删除表。 4. 数据操纵语言(DML):用于插入、更新和删除数据。常见的DML语句有INSERT、UPDATE、DELETE等。 5. 数据控制语言(DCL):涉及权限和访问控制,如GRANT、REVOKE语句,用于授予或撤销用户对数据库对象的访问权限。 6. 事务管理语言:用于管理数据库事务,确保数据的一致性和完整性。BEGIN TRANSACTION、COMMIT、ROLLBACK等语句用于开始、提交或回滚事务。 7. 附加语言元素:包括游标、变量、异常处理(TRY-CATCH)、嵌套的SQL语句等,这些元素增强了T-SQL的编程能力。 8. 数据类型:SQL Server 2008提供了多种数据类型,如整数类型(tinyint、smallint、int、bigint)、浮点数类型(float、real)、日期时间类型(datetime、smalldatetime)等,每种类型都有其特定的取值范围。 9. 内置函数:T-SQL包含了大量的内置函数,如数学函数(SUM、AVG)、字符串函数(CONCAT、SUBSTRING)、日期时间函数(GETDATE、DATEADD)等,用于处理数据和表达式。 10. 本章小结:通过学习这一章,读者将能理解和掌握T-SQL的基本概念和使用方法,为在SQL Server 2008中进行高效的数据操作打下坚实的基础。 SQL Server 2008的溢出错误处理通常需要理解错误的具体原因,检查涉及的数据类型和数值,确保它们在允许的范围内。如果需要存储更大或更小的值,可能需要调整数据类型,或者对数据进行适当的转换和处理,以避免溢出错误的发生。

编译报错 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 上传