数据库语句相关技巧

复制一个表的数据到另一个表

当这两个表的结构相同且属于不同的数据库时,可采用插入的方法:
以两个库的location_map表为例:

INSERT INTO [GHNEWTEST.DB].[dbo].[R_STORAGE_LOCATION_MAP_T] SELECT 
[RACK_NO],
[PALLET_ID],
[STATE],
[FREEZE],
[CREATE_TIME] 
FROM [GZHTWarehouse.DB].[dbo].[R_STORAGE_LOCATION_MAP_T]

注意:选择原数据的表字段时要剔除掉 ID,因为 ID 无法复制,一般都是自增长的

为某个字段已存在的数据中添加内容

UPDATE C_STORAGE_LOCATION_BASE_T SET RACK_NO = 'A' + RACK_NO

此语句功能为RACK_NO的每个数据前加上字符 A
效果图

SUBSTRING用法

substring('abdcsef',1,3)
Sql Server中括号中数字‘1’表示截取的起始位置是从该字符串第一个字符开始,‘3’表示截取后得到的字符串长度为3个字符。
结果:
abd

修改某个字段已存在的数据的内容

UPDATE C_STORAGE_LOCATION_BASE_T SET RACK_NO = REPLACE(RACK_NO, 'A', 'B') 

此语句功能为将RACK_NO的每个数据中的 A 替换成 B
效果图

将一个表的数据插入到另一个表中

  INSERT INTO R_STORAGE_LOCATION_MAP_T (RACK_NO) 
  SELECT RACK_NO FROM C_STORAGE_LOCATION_BASE_T where ID>754

此语句功能为将base表中ID>754的RACK_NO数据插入到MAP表中

模糊查询

if (!string.IsNullOrWhiteSpace(partName))
 {
   sql.Append(" AND PART_NAME LIKE @PARTNAME ");
   dbParams.Add("@PARTNAME", SqlDbType.NVarChar,"%"+partName+"%");
 }

App.config相关说明

<add key="GH.DB" value="Data Source=.,1433;Network Library=DBMSSOCN;Initial Catalog=GZHTWarehouse.DB;User ID=sa;Password=12345;"/>
  • Data Source=.中的 . 代表localhost
  • 应用程序入口的main中的SqlServerString.SqlConnectString = "GH.DB";要和App.config中的key="GH.DB"一致

显示指定数据行数

top("行数")即可,例:

SELECT top(20) * FROM C_KEYPART_BASE_T

即只显示KEYPART_BASE表的前20行数据

参数为list<string>查询

public ExecutionResult SearchByBoxNums(List<string> boxNums)
{
  string sql = null;
  ExecutionResult exeResult = null;
  string boxNo = "";
  foreach (var item in boxNums)
  {
     boxNo += "'" + item + "',";
  }
  boxNo = boxNo.Substring(0, boxNo.Length - 1);
  sql = string.Format(@"SELECT * FROM R_BOX_MAP_T where BOX_NO in ({0})", boxNo);
  DBParameter dbParams = dbParams = new DBParameter();
  exeResult = sqlHelper.ExecuteQueryDS(sql.ToString(), dbParams.GetParameters());
  return exeResult;
}

若参数为List<int>类型,则把foreach内改为boxNo += item + ",";

在DAO层做事务处理

将要处理的多张表单独写多个sql,然后进行统一拼接执行处理

public ExecutionResult UpdateQty(string ApplyNo, string PalletNo, string BoxNo, string KPN, string Batch, string count, string taskNo, string user)
        {
            ExecutionResult exeResult;
            exeResult = new ExecutionResult();
            DBParameter dbParams;
            dbParams = new DBParameter();
            StringBuilder sb;
            sb = new StringBuilder();
            SQLTransactionHelper trans;
            trans = new SQLTransactionHelper();

            sb.Append(" UPDATE R_MATERIAL_SHEET_T SET ISSUED_QTY=ISSUED_QTY+@QTY WHERE APPLY_NO=@APPLY_NO AND PART_NO=@KPN; ");

            sb.Append(@" INSERT INTO R_STORAGE_KEYPARTS_RECORD_T
           (OPERATION_ID, OPERATION_TYPE, PALLET_NO, BOX_NO , PART_NO , PART_BATCH_NUMBER,UNIT_QTY,CREATE_USER,CREATE_TIME)
           VALUES(@TASK_NO,'出库',@PALLET,@BOX,@KPN,@BATCH,@QTY,@USER,GETDATE()) ");

            dbParams.Add("@APPLY_NO", SqlDbType.NVarChar, ApplyNo);
            dbParams.Add("@TASK_NO", SqlDbType.NVarChar, taskNo);
            dbParams.Add("@PALLET", SqlDbType.NVarChar, PalletNo);
            dbParams.Add("@BOX", SqlDbType.NVarChar, BoxNo);
            dbParams.Add("@KPN", SqlDbType.NVarChar, KPN);
            dbParams.Add("@BATCH", SqlDbType.NVarChar, Batch);
            dbParams.Add("@QTY", SqlDbType.Int, int.Parse(count ?? "0"));
            dbParams.Add("@USER", SqlDbType.NVarChar, user);

            try
            {
                trans.BeginTransaction();
                trans.ExecuteUpdate(sb.ToString(), dbParams.GetParameters());
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
            finally
            {
                trans.EndTransaction();
            }
            return exeResult;
        }

用sql生成仓位基础数据

以生成贵航仓库2排×13列×29层储位为例

DECLARE @i int, @j int, @k int, @str varchar,@rackNo varchar(50) --i列号,j层号,k排号
 set @i=0
 set @j=0
 set @k=0
 set @rackNo=''
 WHILE @k<2
 begin
 set @i=0
 if @k=0
  begin set @str='A' end
 if @k=1
  begin set @str='B' end
 
WHILE @i<13
BEGIN
set @j=0
 WHILE @j < 29
 begin
 if (@i < 9)
 begin
  if(@j < 9) 
   begin set @rackNo = '0'+convert(varchar(50),(@k+1))+'0'+convert(varchar(50),(@i+1)) + '0' + convert(varchar(50),(@j+1)) end
  else
   begin set @rackNo = '0'+convert(varchar(50),(@k+1))+'0'+convert(varchar(50),(@i+1)) + convert(varchar(50),(@j+1)) end
 end
 
 else
 begin
   if(@j < 9) 
    begin set @rackNo = '0'+convert(varchar(50),(@k+1))+convert(varchar(50),(@i+1)) + '0' + convert(varchar(50),(@j+1)) end
  else
    begin set @rackNo = '0'+convert(varchar(50),(@k+1))+convert(varchar(50),(@i+1)) + convert(varchar(50),(@j+1)) end
 end
    BEGIN
    INSERT INTO C_STORAGE_LOCATION_BASE_T (STORAGE_ID,RACK_NO,ROW_NUMBER,COLUMN_NUMBER,FLOOR_NUMBER,CREATE_TIME) 
            VALUES  (@str, @rackNo, @k+1, @i+1, @j+1,GETDATE())  
    SET @j=@j+1   
    END 
    end
 SET @i=@i+1
END

set @k=@k+1
end

表结构为:

SOTRAGE_ID为了区分两个库设定了A库和B库

用list批量插入数据库表数据

public ExecutionResult InsertPlan(List<EquipmentPlanLog> value)
        {
            string sql = @"INSERT INTO C_EQUIPMENT_MAINTAIN_PLAN_T (
             EQIP_ID
            ,EQIP_NAME
            ,EXPECT_MAINTAIN_DATE
            ,PERSON
            ,EQ_STATE
            ,REASON
            ,REMARK
            ,CREATE_TIME)
            VALUES ";

            foreach (var item in value)
            {
                string str = " ('{0}','{1}','{2}','{3}','{4}','{5}','{6}',GETDATE()),";
                str = string.Format(str, item.EqipId, item.EqipName, item.MaintainDate, item.Person, item.EqState, item.Reason, item.Remark);
                sql = sql + str;
            }
            char[] chr = {','};
            sql = sql.TrimEnd(chr); //去掉sql语句最后的 “ , ”
            var exeResult = sqlHelper.ExecuteQueryDS(sql);
            return exeResult;
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,561评论 18 139
  • SQL语言基础 本章,我们将会重点探讨SQL语言基础,学习用SQL进行数据库的基本数据查询操作。另外请注意本章的S...
    厲铆兄阅读 5,292评论 2 46
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • 阴郁的天,慵懒的你我,杂乱的街道,似梦似醒间 远处的汽笛,风吹过的口哨声,忽近忽远,忽远忽近,沉默的梦境,内心的呐...
    简安2023阅读 270评论 0 0
  • 第三型:成就型 17分 (Achiever/Motivator)【实干者】 【欲望特质】:追求成果 〖主要特征〗:...
    ActorThinker阅读 621评论 0 1