UPDATE servercmd SET serverid = 998;

本文介绍SQL基础知识,包括使用ALTER TABLE修改表结构,如添加、更改、删除列等操作;使用DELETE删除表中的行;使用UPDATE更新表中的数据。通过案例演示如何运用这些命令实现数据的有效管理。

SQL基础篇-----修改表内的数据,删除列

知识点1----ALTER

下列代码意义:向已存在的表my_foods中新增自动排列的列 作为主键

ALTER TABLE my_contacts  --表名称

ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST,   --新的 列 id,自动排列,该列于第一位 
ADD PRIMARY KEY (id);  --要求新命名的id列作为主键

如果不需要作为主键,则去掉 PRIMARY KEY 即可!

排序关键字:

FIRST - --把 列id 安置于所有其他列的前面

LAST -- 把列 id 安置于其他列的后面

SECOND -- 把列 id 安置为 第二个列

AFTER(column1) -- 将列 id 放在 column1 后面

BEFORE(column2) -- 将列 id 放在 column2 前面

 

功能关键字:

ADD --- 在当前表中增加一列——可自选类型(见始端)

CHANGE--- 可以同时改变现有的列名称和数据类型

ALTER TABLE my_contacts
CHANGE COLUMN breakfast morning_foods  VARCHAR(20);   -- 旧名称breakfast改为 morning_foods ,新的类型为 VARCHAR(20)

 

 

MODIFY ---修改现有列的数据类型或者位置

ALTER TABLE my_contacts
MODIFY COLUMN morning_foods  AFTER id;

DROP -- 从表中删除某列

ALTER TABLE my_foods
DROP COLUMN morning_foods; 

 

RENAME TO ----给表重新命名

ALTER TABLE my_contacts
RENAME TO contacts;

 

 

知识点2  DELETE

----删除单一行或者所有行的值

DELETE FROM my_foods --my_foods是要删除的行所在的表
WHERE breakfast = 'bread';

 

DELETE 与 SELECT 区别:DELETE不需要指定删除的对象,因为他很残忍,会把整行的所有列都删除。

所以,DELETE不能单一删除某一列中值或者某一列的所有值;但是可以删除一行或者多行(根据WHERE语句来定)。WHERE子句中的搭配关键字,类似SELECT的使用方法,如LIKE、IN、BETWEEN,都可以在此处使用,而且所有条件都能更准确地要求RDBMS删除特定行。

 

要是想修改某一行的某一列值,可以使用DELETE和INSERT配合来完成:先确定需要改变的值是你真正需要的值(因为删除掉的难以恢复),然后插入数据,删除原来的数据

复制代码
SELECT *FROM my_foods
WHERE breakfast = 'milk';

INSERT  INTO my_foods
VALUES('bread+milk');

DELETE FROM my_foods
WHERE breakfast = 'milk';
复制代码

 

这样做的缺点是:需要把全部的行的相同数据重新输入一次,效率降低!UPDATE可以化简这个问题!

 

 知识点3  UPDATE

--改变单一列或者所有列的值(不加上WHERE就会把那一列的所有数据都修改为新的值)

UPDATE my_foods
SET breakfast = 'bread'

 

要是需要更新单一行或者多行,一切都需要交给WHERE来决定

UPDATE my_foods   ---选择更新的表
SET breakfast = 'bread'    --设置列 的值为什么
WHERE breakfast = 'milk';    --定位

 要是需要用到多个UPDATE,可以用一下方法(加入CASE关键字!!):

复制代码
UPDATE my_foods            --表名称
SET breakfast =        --指定的列值将根据下列条件做适当的更新
CASE 
    WHEN lunch = 'fish'    --当lunch 的值为 ‘fish’时,将breakfast的值修改为meat! 
        THEN 'meat'
    WHEN lunch = 'fruit'
        THEN 'apple'
    ELSE 'rice'
END
复制代码

 

附:CASE语句可以适用于 SELECT ,INSERT, DELETE,UPDATE语句中!

...

当然,SET 不但可以对各种数据类型赋值,也可以套用一些基础的运算,函数等等。

UPDATE my_foods
SET foods_num = foods_num +1
WHERE breakfast IN ('bread','milk');
你是一位高级SQLSERVER2012程序员,也是高级VB6.0程序员,我有以下在存储过程,USE [HM_System] GO /****** Object: StoredProcedure [dbo].[CloseWarehouseOperation] Script Date: 2025/9/23 20:35:34 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- 仓库结仓操作 ALTER PROCEDURE [dbo].[CloseWarehouseOperation] @TableName NVARCHAR(128),--通过表名来确认什么表要结仓更新 @CloseWarehouseDate DATE, -- 输入参数,表示用户选择生成初期数日期的任意一天(格式:YYYY-MM-DD) @Mode BIT,--是结仓还是取消结仓 @Success BIT OUTPUT --输出是否成功 AS BEGIN SET NOCOUNT ON; SET @Success = 1; -- 默认设置为成功 PRINT '1111' -- 参数校验 IF @TableName IS NULL OR @TableName='' BEGIN RAISERROR(N'输入参数 @TableName 不能为空', 16, 1); RETURN; END; -- 参数校验 IF @CloseWarehouseDate IS NULL OR @CloseWarehouseDate='' BEGIN RAISERROR(N'输入参数 @CloseWarehouseDate 不能为空', 16, 1); RETURN; END; BEGIN TRY -- 声明变量用于存储时间范围 DECLARE @MonthFirstDay DATE; -- 当前月份的第一天 DECLARE @NextMonthFirstDay DATE; -- 下一个月的第一天 -- 计算当前月份的第一天和下一个月的第一天 SET @MonthFirstDay = DATEFROMPARTS(YEAR(@CloseWarehouseDate), MONTH(@CloseWarehouseDate), 1); -- 当月第一天 SET @NextMonthFirstDay = DATEADD(MONTH, 1, @MonthFirstDay); -- 下个月第一天 PRINT '2222' -- 开始事务 BEGIN TRANSACTION; IF @TableName='成型出库表' BEGIN -- 处理入库表 UPDATE 成型入库表 SET 结仓否 = @Mode WHERE 入库日期 >= @MonthFirstDay AND 入库日期 < @NextMonthFirstDay; -- 处理出库表 UPDATE 成型出库表 SET 结仓否 = @Mode WHERE 出库日期 >= @MonthFirstDay AND 出库日期 < @NextMonthFirstDay; END PRINT '3333' IF @TableName='烧结出库表' BEGIN -- 处理入库表 UPDATE 烧结入库表 SET 结仓否 = @Mode WHERE 进炉日期 >= @MonthFirstDay AND 进炉日期 < @NextMonthFirstDay; -- 处理出库表 UPDATE 烧结出库表 SET 结仓否 = @Mode WHERE 出库日期 >= @MonthFirstDay AND 出库日期 < @NextMonthFirstDay; END IF @TableName='研磨出库表' BEGIN -- 处理入库表 UPDATE 研磨入库表 SET 结仓否 = @Mode WHERE 开始时间 >= @MonthFirstDay AND 开始时间 < @NextMonthFirstDay; -- 处理出库表 UPDATE 研磨出库表 SET 结仓否 = @Mode WHERE 出库日期 >= @MonthFirstDay AND 出库日期 < @NextMonthFirstDay; END IF @TableName='包装出库表' BEGIN -- 处理入库表 UPDATE 包装入库表 SET 结仓否 = @Mode WHERE 开始时间 >= @MonthFirstDay AND 开始时间 < @NextMonthFirstDay; -- 处理出库表 UPDATE 包装出库表 SET 结仓否 = @Mode WHERE 出库日期 >= @MonthFirstDay AND 出库日期 < @NextMonthFirstDay; END IF @TableName='材料仓出库表' BEGIN -- 处理入库表 UPDATE 材料仓入库表 SET 结仓否 = @Mode WHERE 入库日期 >= @MonthFirstDay AND 入库日期 < @NextMonthFirstDay; -- 处理出库表 UPDATE 材料仓出库表 SET 结仓否 = @Mode WHERE 出库日期 >= @MonthFirstDay AND 出库日期 < @NextMonthFirstDay; -- 处理冲红表 UPDATE 仓库冲红表 SET 结仓否 = @Mode WHERE 冲红日期 >= @MonthFirstDay AND 冲红日期 < @NextMonthFirstDay AND 材料仓入库ID IS NOT NULL; END IF @TableName='成品出库表' BEGIN -- 处理入库表 UPDATE 成品入库表 SET 结仓否 = @Mode WHERE 入库日期 >= @MonthFirstDay AND 入库日期 < @NextMonthFirstDay; -- 处理出库表 UPDATE 成品出库表 SET 结仓否 = @Mode WHERE 出库日期 >= @MonthFirstDay AND 出库日期 < @NextMonthFirstDay; -- 处理冲红表 UPDATE 仓库冲红表 SET 结仓否 = @Mode WHERE 冲红日期 >= @MonthFirstDay AND 冲红日期 < @NextMonthFirstDay AND 成品入库ID IS NOT NULL; END -- 提交事务 COMMIT TRANSACTION; END TRY BEGIN CATCH -- 回滚事务 IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; SET @Success=0 -- 错误处理 DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); RAISERROR(N'存储过程执行失败: %s', @ErrorSeverity, @ErrorState, @ErrorMessage); END CATCH; END;我 在SQLSERVER2012通过以下的方式调用是正常运行的。USE [HM_System] GO DECLARE @return_value int, @Success bit EXEC @return_value = [dbo].[CloseWarehouseOperation] @TableName = N'成型出库表', @CloseWarehouseDate = '2025/7/5', @Mode = false, @Success = @Success OUTPUT SELECT @Success as N'@Success' SELECT 'Return Value' = @return_value 但是我在VB6.0通过下面的方式调用时, '仓库结仓操作 Public Function EXECShapingCloseWarehouseOperation(TableName As String, CloseWarehouseDate As String, Optional Mode As Boolean = True) As Boolean 'Mode:是结仓还是取消结仓 '-- 仓库结仓操作 'ALTER PROCEDURE [dbo].[CloseWarehouseOperation] ' @TableName NVARCHAR(128),--通过表名来确认什么表要结仓更新 ' @CloseWarehouseDate DATE, -- 输入参数,表示用户选择生成初期数日期的任意一天(格式:YYYY-MM-DD) ' @Mode BIT,--是结仓还是取消结仓 ' @Success BIT OUTPUT --输出是否成功 Dim Success As ADODB.Parameter '返回是否完成结仓 On Error GoTo ErrorHandler If Cn.State = adStateClosed Then OpenConnServer Set conn = Cn ' 创建命令对象 Set cmd = New ADODB.Command cmd.ActiveConnection = conn cmd.CommandText = "dbo.CloseWarehouseOperation" cmd.CommandType = adCmdStoredProc '表明这是一个存储过程 ' 入参 cmd.Parameters.Append cmd.CreateParameter("@TableName", adVarChar, adParamInput, 128, TableName) cmd.Parameters.Append cmd.CreateParameter("@CloseWarehouseDate", adDate, adParamInput, , CloseWarehouseDate) cmd.Parameters.Append cmd.CreateParameter("@Mode", adBoolean, adParamInput, , Mode) '出参 Set Success = cmd.CreateParameter("@Success", adBoolean, adParamOutput) cmd.Parameters.Append Success ' 执行命令 cmd.Execute EXECShapingCloseWarehouseOperation = CBool(Success) ClearStoredProcCmd ' 清理 Exit Function ErrorHandler: Call ErrorHandler("#370100060" & Err.Description) End Function,会提示[Microsoft][ODBC sQL server Driver]没有执行可选特性。我找不出原因
最新发布
09-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值