有梦想的鱼
写代码我得再认真点,当我最终放下键盘时,我实在不想仍有太多疑惑
posts - 39,comments - 34,views - 47716

主要记录工作中用到的一些开发语言以及Sql 模板,持续更新

1.Sql相关
1.常用Sql模板

1.1. 可重复执行视图

IF EXISTS ( SELECT *FROM  sysobjects WHERE   id = OBJECT_ID('v_Employee') AND type = 'V' ) 
  DROP VIEW v_Employee
GO
CREATE VIEW v_Employee
AS
    SELECT  * FROM  v_Employee a
GO

1.2. 可重复执行新增表

IF NOT EXISTS(SELECT  *FROM    sysobjects WHERE   id = OBJECT_ID('EmployeeInfo') AND type = 'U' ) 
  CREATE TABLE [EmployeeInfo](
          [ID] [uniqueidentifier] PRIMARY KEY CLUSTERED
      ) ;
GO

1.3.可重复执行存储过程

IF ( SELECT OBJECT_ID('proc_GetEmployeeInfo')) IS NOT NULL 
   DROP PROC proc_GetEmployeeInfo
go

1.4.可重复执行修改字段

IF NOT EXISTS ( SELECT  *FROM    syscolumns WHERE   id = OBJECT_ID('EmployeeInfo') AND name = 'Name' ) 
    ALTER TABLE [EmployeeInfo] ADD [Name] [varchar] (50) not null; 
GO
 ALTER TABLE Table1 ALTER COLUMN column1 VARCHAR(255)

1.5.数据库命令

--查看表结构
desc EmployeeInfo
--查看创建表结构的sql语句
show create table EmployeeInfo;
--删除表中的列数据
alter table EmployeeInfo drop Age;
1.行转列查询

下面左边是主表Emp_DataSet 右边是扩展表Emp_DataSet_Ext

Id Code Name Id F_id Ext_column Value
1 1001 张三 1 1 Hobby 篮球
2 1002 李四 2 1 Age 23

例如有如下2个表Emp_DataSet_ExtEmp_DataSet的扩展表,存的是扩展字段,如何将扩展表的值,组合到主表的列呢?所以就需要使用将行转为列

SELECT *
FROM [dbo].[Emp_DataSet] a
     INNER JOIN
(
    SELECT id, 
           MAX(CASE
                   WHEN b.name = 'Hobby'
                   THEN b.value
                   ELSE NULL
               END) AS Hobby, 
           MAX(CASE
                   WHEN b.name = 'Age'
                   THEN b.value
                   ELSE NULL
               END) AS Age
    FROM Emp_DataSet_Ext b
    GROUP BY id
) b ON a.Id = b.F_id;

查询结果如下

Id Code Name Hobby Age
1 1001 张三 篮球 23
2.自增主键插入数据

例如我们需要将测试库Emp_DataSet表和Emp_DataSet关联表的数据,同步到正式库,但是Emp_DataSet表中的id是自增,我们可以使用Sql导出工具导出插入语句,然后使用下面的Sql包裹插入语句就可以实现指定id插入

SET IDENTITY_INSERT [dbo].[Emp_DataSet] ON 
--inset....
SET IDENTITY_INSERT [dbo].[Emp_DataSet] ON 
3.循环数据

在数据库中标准的T-SQL中循环是需要使用游标的,但是到现在为止已经不建议使用游标,触发器之类的了,但是有时候利用Sql处理数据,需要用到一些循环,那该如何实现呢?例如我们需要清空数据库中所有的表数据,思路如下

先查询出当前库的所有表,并且使用ROW_NUMBER()为每条数据给一个id,保证顺序插入临时表

然后使用while循环临时表,利用t-sql拼接删除表数据的语句

SELECT ROW_NUMBER() OVER(ORDER BY Name) AS rowNumber ,Name INTO #t1 FROM SysObjects Where XType='U' orDER BY Name ;

DECLARE @count INT;
DECLARE @index INT=1;
DECLARE @tbname NVARCHAR(40);
DECLARE @sql NVARCHAR(MAX)='';
SELECT @count =COUNT(1) FROM #t1
while @index<=82
BEGIN
SELECT @tbname = name FROM #t1 WHERE rowNumber =@index ;
IF(LEN(@tbname)>0)
BEGIN
PRINT @tbname
SET @sql+='DELETE FROM [dbo].['+@tbname+'];';
END
set @index+=1
END;
PRINT @sql
4.Excel数据处理

有时候人家提供一些Excel数据,需要导入数据库中,我想你一定会说有直接sql操作Excel啊,但是如果有的数据不好操作呢?或者是Csv文件呢?说白了那种方法用不了了,下面就分享一招利用公式生成Sql语句,虽然稍微有点笨笨的但是也是总结的一种经验吧。

="INSERT INTO [dbo].[EmployeeInformation] VALUES('"&A1&"','"&B1&"',N'"&C1&"','"&D1&"','"&G1&"','"&H1&"','"&E1&"','"&I1&"','"&J1&"','"&K1&"','"&L1&"','"&M1&"','"&N1&"','"&O1&"','"&P1&"','"&TEXT(Q1,"yyyy-mm-dd")&"','"&R1&"','','','','','','','','','','"&Y1&"','"&TEXT(Z1,"yyyy-mm-dd")&"','"&TEXT(AA1,"yyyy-mm-dd")&"','"&AB1&"')"
posted on   吃了几碗粉  阅读(176)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示