SQL动态更新表字段 传入字段可能为空

小技巧: 项目组有修改产品的基本信息字段 但有时候传入的字段可能为空 也可能不为空  动态修改表中字段.

 1 USE [BetaProductMarket_DB]
 2 GO
 3 IF(EXISTS(SELECT * FROM dbo.sysobjects WHERE id=object_id(N‘[dbo].[USP_SaveProductBaseInfo]‘) AND OBJECTPROPERTY(id,   N‘IsProcedure‘)= 1))
 4 BEGIN
 5     DROP PROCEDURE [dbo].USP_SaveProductBaseInfo
 6 END
 7 GO
 8
 9 /*
10 作    者:Roni
11 功    能:修改产品基本信息
12 创建时间:2016-5-24
13
14 摘    要:
15
16 */
17
18 CREATE PROCEDURE [dbo].USP_SaveProductBaseInfo
19
20     @ProductID INT,
21     @ProductType TINYINT=0,
22     @ProductName VARCHAR(200)=null ,
23     @RecommendIndex TINYINT=0     ,
24     @Issuer VARCHAR(200)=null,
25     @Period TINYINT=0    ,
26     @Movement VARCHAR(300)=null ,
27     @InvestmentDirection TINYINT=7,
28     @YieldsFixed   DECIMAL(18, 4)=0    ,
29     @YieldsFloat   DECIMAL(18, 4)=0     ,
30     @YieldsType     TINYINT=0    ,
31     @Amount    DECIMAL(18, 4)=0
32
33 AS
34
35 BEGIN
36
37
38 UPDATE Tb_Product
39 SET  UpdateTime=GETDATE(),
40         ProductName= CASE WHEN @ProductName IS NULL THEN Tb_Product.ProductName ELSE @ProductName END ,
41         ProductType= CASE WHEN @ProductType=0 THEN Tb_Product.ProductType ELSE @ProductType END   ,
42         RecommendIndex = CASE WHEN @RecommendIndex =0 THEN Tb_Product.RecommendIndex ELSE @ProductType END     ,
43         Issuer= CASE WHEN @Issuer IS NULL THEN Tb_Product.Issuer ELSE @Issuer END ,
44         Period= CASE WHEN @Period=0 THEN Tb_Product.Period ELSE @Period END   ,
45         Movement= CASE WHEN @Movement IS NULL THEN Tb_Product.Movement ELSE @Movement END ,
46         InvestmentDirection= CASE WHEN @InvestmentDirection=7 THEN Tb_Product.InvestmentDirection ELSE @InvestmentDirection END   ,
47         YieldsFixed= CASE WHEN @YieldsFixed=0 THEN Tb_Product.YieldsFixed ELSE @YieldsFixed END   ,
48         YieldsFloat= CASE WHEN @YieldsFloat=0 THEN Tb_Product.YieldsFloat ELSE @YieldsFloat END   ,
49         YieldsType= CASE WHEN @YieldsType=0 THEN Tb_Product.YieldsType ELSE @YieldsType END   ,
50         Amount= CASE WHEN @Amount=0 THEN Tb_Product.Amount ELSE @Amount END
51 WHERE ProductID = @ProductID
52
53
54
55
56
57
58 END
时间: 2024-10-12 13:44:42

SQL动态更新表字段 传入字段可能为空的相关文章

sql server 删除表字段和字段的约束

删除数据库表中的字段时,使用了 :alter table 表名 drop column 列名 服务器返回的错误为:Server: Msg 5074, Level 16, State 1, Line 1The object 约束名 is dependent on column 列名.Server: Msg 4922, Level 16, State 1, Line 1ALTER TABLE DROP COLUMN 列名 failed because one or more objects acce

SQL把a表字段数据存到b表字段 update,,insert

update SYS_Navigation set SYS_Navigation.PARENT_XH = SYS_Power_menu.parent_id,SYS_Navigation.web_title = SYS_Power_menu.menu_name,SYS_Navigation.WEB_FLAG=1,SYS_Navigation.url=SYS_Power_menu.urlfrom SYS_Power_menuwhere SYS_Navigation.xh = SYS_Power_me

mysql中修改表字段名/字段长度/字段类型详解

先来看看常用的方法 MySql的简单语法,常用,却不容易记住.当然,这些Sql语法在各数据库中基本通用.下面列出: 1.增加一个字段 alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一个字段,默认为空alter table user add COLUMN new2 VARCHAR(20) NOT NULL; //增加一个字段,默认不能为空 2.删除一个字段 alter table user DROP COLUMN ne

Oracle/MySQL/SQL Server修改表字段类型和长度

Oracle ALTER TABLE T_USER MODIFY USERNAME VARCHAR2(18); MySQL ALTER TABLE T_USER CHANGE USERNAME USERNAME VARCHAR(200) NOT NULL COMMENT 'username'; SQL Server ALTER TABLE T_USER ALTER COLUMN USERNAME VARCHAR(200); [注意]SQL Server 字段有约束或者索引,需要按如下方式处理:

SQL Server 联表字段合并查询

经常遇到统计报表中,子表记录合并为一个字段的情况.例如:省表中各省经济水平前五的城市统计. 有如下两表:dbo.省 和 dbo.市 (好吧,你可能会吐槽为什么用中文表名,其实我是为了方便查找替换) 这里暂时不考虑经济水平前五这种外部条件,期望将所有城市使用中文逗号拼接起来,如图: 具体做法如下: --基于子表查询 SELECT P.Name AS '省', STUFF((SELECT ','+Name FROM dbo.市 WHERE Parent=C.Parent FOR XML PATH('

使用SQL脚本将表字段生成实体类属性VO

数据建模之后生成相应的数据库,在开发编程中经常会碰到一件很麻烦的事情,那就是要将表写成相应的实体类,对于开发者来说一个字段一个字段的比对.复制.粘贴……这简直是一件让人抓狂的事情,现在特地将相应的脚本整理出来,已在oracle中测试.脚本如下: select 'private ' ||DECODE(T.DATA_TYPE, 'VARCHAR2', 'String ', 'CHAR', 'String ', 'DATE', 'Date ', 'NUMBER', 'int ', 'LONG', 'L

SQL SERVER 获取表字段信息

CREATE PROCEDURE [Common].[ProcLoadColumnInfo] @inObjectName sysname AS BEGIN SELECT  TableCatalog = DB_NAME() , TableSchema = SCHEMA_NAME(C.schema_id) , TableName = D.name , ColumnName = A.name , ColumnPosition = A.colorder , DataType = B.name , Max

SQL中更新A表的字段数据到B表的字段

update t_test1 set name = (select name from t_test2 b where t_test1.id = b.id)

Sql获取数据表字段说明

SELECT Sysobjects.name AS TABLE_NAME , syscolumns.Id , syscolumns.name AS COLUMN_NAME , systypes.name AS DATA_TYPE , syscolumns.length AS CHARACTER_MAXIMUM_LENGTH , sys.extended_properties.[value] AS COLUMN_DESCRIPTION , syscomments.text AS COLUMN_DE