Sqlserver
北方的木
看了不是你的,看懂了才是你的!
展开
-
优化查询速度—可以新建索引
给表新建非聚合索引选择对应的索引键,在添加对应的包含列原创 2021-11-18 12:26:07 · 245 阅读 · 0 评论 -
sql扫描计数和查看执行计划获取sql的查询具体信息
SET STATISTICS IO ONSELECT * FROM 查询原创 2021-11-18 12:20:02 · 443 阅读 · 0 评论 -
sql查询表时将*直接变成表的全部字段名
在*处点击tab原创 2021-10-25 17:56:07 · 942 阅读 · 0 评论 -
ssrs报表每页显示表头
1.先列组显示高级2.选择行组3.选择对应的属性原创 2021-10-11 17:49:38 · 434 阅读 · 0 评论 -
sql将逗号分隔的数据变成多行数据
效果代码SELECT * FROM excel_house_zz_nydqc_temp_data --将逗号分隔的数据变成多行数据;with Roy as (select batch_guid,tsbh,fwz_zjlx=cast(left(fwz_zjlx,charindex(',',fwz_zjlx+',')-1) as nvarchar(100)),Split_1=cast(stuff(fwz_zjlx+',',1,charindex(',',fwz_zjlx+','),'') as n原创 2021-08-13 11:22:26 · 5883 阅读 · 0 评论 -
linq中2个集合取交集
var trigger_item = "HQ_005,HQ_006,HQ_008,HQ_009"; var list = trigger_item.Split(','); var contract_formula = base.ContractFormulaDb.GetList(a => a.proj_id == proj_id).OrderBy(a => a.s_num).ToList(); if (!trigger..原创 2021-08-04 18:14:28 · 671 阅读 · 0 评论 -
根据逗号分隔的条件查询出逗号分隔的字段
SELECT STUFF(( SELECT DISTINCT‘,’ + CONVERT(NVARCHAR(20), user_id)FROM p_userWHERE user_name IN ( SELECT valFROM f_split(@proj_leader, ‘,’) ) OR user_name=@proj_leaderFORXML PATH(’’)), 1, 1, ‘’)原创 2021-07-30 09:59:33 · 396 阅读 · 0 评论 -
根据条件删除分组后最大数据外以外的其他数据
delete from 表 where id not in (select max(id) from 表 WHERE 字段名='xxx' group by contract_guid) AND 字段名='xxx'原创 2021-07-28 16:31:18 · 306 阅读 · 0 评论 -
truncate table(清空表)
truncate table(清空表) 是清空一个表,是一个DDL语言,效率高,它与delete有如下区别。delete是DML语言;delete时会触发与表相关的触发器,而truncate不会;delete可以有删除条件,truncate没有。原创 2021-07-28 15:03:30 · 4255 阅读 · 0 评论 -
sql分组拼接字段
SELECT 字段1, stuff(( SELECT ',' + [字段2] FROM 表 t WHERE t.字段1 = a.字段1 FOR xml path('')) , 1 , 1 , '') as ‘ssss’ FROM 表 aGROUP BY 字段1原创 2021-07-27 17:26:42 · 1515 阅读 · 0 评论 -
判断是否null或者0返回保留3位小数函数
CREATE FUNCTION dbo.fn_conversionzero_mj ( @decNum DECIMAL(18, 3))RETURNS VARCHAR(200) --返回返回值的数据类型ASBEGIN RETURN IIF(@decNum = 0 OR @decNum IS NULL , '/' , CONVERT(NVARCHAR(30), @decNum)) ;END ;原创 2021-07-26 16:21:24 · 119 阅读 · 0 评论 -
查询表的第几条数据
SELECT *FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY id) AS idx , o.name , FROM table o ) a WHERE a.idx=1原创 2021-07-02 18:17:39 · 243 阅读 · 0 评论 -
sql获取时间字段的年月日
SELECT '('+convert(varchar(50),YEAR(co.qddate)) +'年'+convert(varchar(50),Month(co.qddate)) +'月'+convert(varchar(50),Day(co.qddate)) +'日)'原创 2021-07-02 16:48:21 · 1628 阅读 · 0 评论 -
表标量值函数数组金额转换为大写金额
USE [jy_dev]GO/****** Object: UserDefinedFunction [dbo].[toUppercaseRMB] Script Date: 2021/6/28 18:20:06 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER function [dbo].[toUppercaseRMB] ( @LowerMoney decimal(18,4))returns varchar(200)原创 2021-06-28 18:21:25 · 138 阅读 · 0 评论 -
sql在in定义变量时报错——将 varchar 值 ‘‘ 转换成数据类型 int 时失败。
解决方案用转换字段用INDEX判断原来 WHERE id in(@id)改后 WHERE CHARINDEX(CAST(id AS NVARCHAR(10)),@id) > 0原创 2021-06-26 15:40:24 · 1326 阅读 · 0 评论 -
sql导入数据库时映射类型改为nvarchar还是取值为null的问题
解决方法将前面8行的数据全部改为文本,导入的时候那个导入机制就自动识别成文本了原创 2021-06-25 17:14:19 · 257 阅读 · 0 评论 -
excel导入到数据库
1.选择数据库右击,任务,选择导入数据2.选择数据源3.选择导入的数据库4.选第一个就好原创 2021-06-25 16:00:22 · 218 阅读 · 0 评论 -
sql查询关联时只要子表的一条数据(cross APPLY和outer APPLY用法)
代码--测试主表SELECT * FROM test2--测试字表SELECT * FROM test1--普通关联SELECT * FROM test2 LEFT JOIN test1 ON test2.Action=test1.action--类似内关联SELECT * FROM test2 cross APPLY (SELECT * FROM test1 WHERE test1.ACTION=test2.Action) test1 --类似左关联SELECT * FROM te原创 2021-06-07 15:55:56 · 1318 阅读 · 0 评论 -
sqlserver更新表结构(新增字段删除字段)
–新增列ALTER table p_requirement add [followup_user] VARCHAR(50) NULLalter table p_requirement add [followup_date] DATETIME NULL–删除列alter table p_requirement drop column [gjr_user]alter table p_requirement drop column [gj_date]原创 2021-05-21 10:06:08 · 676 阅读 · 0 评论 -
游标的使用demo
游标很耗性能,能不使用就尽量不使用游标分为静态和动态静态游标在打开时会将数据集存储在tempdb中,在游标打开以后对数据库的更新不会显示在游标中。动态游标在打开后会反映对数据库的更改。-- 声明游标名DECLARE yb_name CURSORFOR --接查询语句SELECT TestId , ActionFROM dbo.test2;-- 打开游标OPEN yb_name;-- 临时变量DECLARE @TestId UNIQUEIDENTIFI原创 2021-04-23 17:14:11 · 85 阅读 · 0 评论 -
sql中对某个字段进行占比计算
SELECT a.wy_type , a.counts , b.sums , ROUND(CONVERT(DECIMAL(18, 2), a.counts) / b.sums * 100, 4) AS proportionFROM ( SELECT wy_type , COUNT(h.house_id) AS counts FROM p_building_house h原创 2021-03-31 14:04:51 · 7514 阅读 · 0 评论 -
Sql中精确到多少位并截取掉多余的0
SELECT CAST(--cast是转换类型 CONVERT(DECIMAL(18, 4)--4是保留几位 , ROUND(CONVERT(DECIMAL(18, 4), 2000)--2000是数值 / 10000, 4)) AS VARCHAR(20)) + '万平' AS gzssfwcc_bld_mj;原创 2021-03-31 12:06:44 · 357 阅读 · 0 评论 -
sql中判断表中是否存在某个字段并添加或删除
--判断表中是否存在这个字段,不存在就新增if not exists(select * from sys.columns where name='字段名称' and [object_id]=object_id(N'表名'))begin alter table 表名 add 字段名称 money;endGO--判断表中是否存在这个字段,存在就删除if exists(select * from sys.columns where name='字段名称' and [object_id]=obje.原创 2021-03-23 14:44:48 · 7233 阅读 · 0 评论 -
sql获取当前时间精确到秒的字符串
效果SELECT REPLACE( convert(varchar(20),GETDATE(),112)+convert(varchar(20),GETDATE(),108),':','')原创 2021-03-19 11:29:32 · 2648 阅读 · 0 评论 -
存储过程事务回滚及try catch
begin begin try--捕捉异常 begin tran--可以理解成新建一个还原点。 ********各种新增修改操作 commit tran--提交事务 end try begin catch--出现异常 select @msg--设置返回异常信息 rollback tran--回滚事务 end catchend...原创 2021-03-19 11:18:20 · 362 阅读 · 0 评论 -
利用select into直接创建临时表
利用select into直接创建临时表,省略create过程 select * into #临时表 from 数据表 select * from #临时 drop table #临时表原创 2021-03-19 10:41:39 · 4031 阅读 · 0 评论 -
sql之用查询表结构或者查询存储过程脚本
sp_help 表名–查询表的信息和表结构sp_columns 表名–查询表结构及所在数据库所在表sp_helptext 存储过程–查询存储过程脚本原创 2021-03-19 09:25:48 · 426 阅读 · 0 评论 -
sql优化之_子表统计并更新主表_update set from where
当数据量到一定程度后如果用update set where可能出现卡死的情况优化前UPDATE 主表SET 主表字段= ( SELECT a.id ,SUM(a.XXX) AS count FROM XXX GROUP BY a.id )WHERE 表.id = XXX优化后用update set from whereUPDATE 主表SET 主表字段= a.原创 2021-03-05 18:16:16 · 1682 阅读 · 0 评论 -
for xml path的用法
for xml path其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。简单使用当for xml path(’’)为空字符串时节点就是没有的场景查询出多行的一列数据然后要将其拼接(‘’)为空时select a. unit+',' from (SELECT unit FROM 表名 WHERE **条件**) a for xml path('')(“节点名称”)不为空select a. unit+',' from (原创 2021-01-26 18:27:27 · 3551 阅读 · 0 评论 -
SQL性能优化之join临时表关联查询取代in
in适合什么场合呢,如果后面的value list很少,而且字段上存在索引,甚至是主键,这个时候用in性能比较高,但是当value list达到一定的临界值的时候会导致All全表扫描in的方式,fn_Split1方法之前的文档有SELECT DISTINCT v.VouchGUIDFROM dbo.s_Voucher vWHERE v.VouchGUID IN ( SELECT原创 2021-01-25 18:52:23 · 2591 阅读 · 1 评论 -
sql循环插入
DECLARE @i INT = 0; --设置循环次数起始值WHILE @i < 200 --200是循环终止次数BEGININSERT INTO 表名(字段名)VALUES(字段值);SET @i = @i + 1;END;原创 2021-01-22 17:09:18 · 2464 阅读 · 0 评论 -
数据库时间戳timestamp类型的使用及其场景
1.公开数据库中自动生成的唯一二进制数字的数据类型。2.timestamp 通常用作给表行加版本戳的机制。3.存储大小为 8 个字节。 不可为空的 timestamp 列在语义上等价于 binary(8) 列。可为空的 timestamp 列在语义上等价于 varbinary(8) 列。这将导致在C#程序中获取到的timestamp类型则变成了byte[]类型。所以如果我们需要从数据库中获取并使用这个时间戳的话就必需经过转换。4.timestamp 数据类型只是递增的数字,不保留日期或时间。 若要记录原创 2021-01-18 15:23:07 · 4063 阅读 · 0 评论 -
SQL Server实现列转行
今天介绍4种列转行(又称宽表转长表、逆透视等)写法。 数据准备 CREATE TABLE Sales([Year] INT,Q1 INT,Q2 INT,Q3 INT,Q4 INT);GOINSERT INTO Sales([Year],Q1,Q2,Q3,Q4) VA...转载 2020-12-23 13:54:13 · 3688 阅读 · 2 评论 -
sqlserver中varchar类型输入汉字变成?
场景:表结构中字段类型为varchar,用N’的形式插入或者修改都是?解决办法:varchar改为nvarchar区别varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据。nvarchar(n)包含 n 个字符的可变长度 Unicode 字符数据。...原创 2020-12-23 13:00:21 · 1096 阅读 · 0 评论 -
sqlserver中创建Split函数并使用
--判断是否存在fn_Split函数有就删除了在创建if exists(select * from sys.objects where name='fn_Split')drop function dbo.fn_Split;SET QUOTED_IDENTIFIER ON--SET QUOTED_IDENTIFIER ON:与系统关键字重复的,允许使用双引号括起来,就能正常使用。注意是双引号--【在 SET QUOTED_IDENTIFIER on 的情况下是可以把sqlserver的标识符加上双引原创 2020-12-14 14:21:57 · 1287 阅读 · 0 评论 -
sqlserver如何删除表中除主键外一模一样的数据
--创建测试表create table test2 ( TestId UNIQUEIDENTIFIER not null , AddedOn varchar(50) not null, Action varchar(50) not null, Item int not null, Parent int not null, Param int not null, BoolParam int not null, Content int not null, Proprt原创 2020-12-11 10:34:46 · 5083 阅读 · 5 评论 -
查询数据在那些表中出现过(可以根据文字或者数值或者GUID进行查询)
--DROP TABLE #tblDECLARE @type int--类型:1为文字类型、2为数值类型 、3为GUID DECLARE @str nvarchar(100)--需要搜索的名字 SET @type=1 SET @str='定金'--创建临时表存放结果 create table #tbl(PK int identity primary key ,tbl sysname,col sysname) declare @tbl nva原创 2020-12-03 17:07:59 · 691 阅读 · 1 评论 -
Sqlserver中将逗号分隔的字符转换可以IN的数据集合
SELECTc.value('.', 'varchar(50)') AS listFROMfy_DailyExpense aCROSS APPLY (SELECT CAST('<row>' + REPLACE(ExpenseApplyGUIDs, ',', '</row><row>') + '</row>' AS XML) AS xmlcode) C1CROSS APPLY xmlcode.nodes('*') t(c)效果图.原创 2020-11-11 16:04:33 · 2647 阅读 · 0 评论 -
sqlserver根据条件更新
if exists(select * from 表名 where 判断记录存在的条件)beginupdate…更新语句endelsebegininsert…插入语句end原创 2020-08-27 13:43:53 · 1578 阅读 · 0 评论 -
sqlserver自定义规则排序
SELECT * FROM table1ORDER BYCASE ItemNameWHEN ‘名称1’THEN1WHEN ‘名称2’THEN2WHEN ‘名称3’THEN3ELSE4END;原创 2020-08-26 10:25:22 · 570 阅读 · 0 评论