insert into Table_GuidTestIn(Guid,name)values(NEWID(),'111')
insert into Table_GuidTestIn(Guid,name)values(NEWID(),'222')
insert into Table_GuidTestIn(Guid,name)values(NEWID(),'333')
select * from Table_GuidTestIn
1.通常写法
SELECT * FROM dbo.Table_GuidTestIn WHERE Guid IN ('FEC2C17B-6C11-49D1-9E6F-7D78230A0548','80AD7D07-18DE-4AB9-8CB8-9A5481AC1CFD','02E74C94-A4C0-40D6-A67E-FE563E767422')
SELECT * FROM Table_GuidTestIn
WHERE CHARINDEX(','+LTRIM(Guid)+',',','+'FEC2C17B-6C11-49D1-9E6F-7D78230A0548,80AD7D07-18DE-4AB9-8CB8-9A5481AC1CFD,02E74C94-A4C0-40D6-A67E-FE563E767422'+',')>0
注意:使用CHARINDEX
不能写成以下写法,这样会导致数据丢失
总而言之,CHARINDEX(','+LTRIM(Guid)+',',','+'FEC2C17B-6C11-49D1-9E6F-7D78230A0548,80AD7D07-18DE-4AB9-8CB8-9A5481AC1CFD,02E74C94-A4C0-40D6-A67E-FE563E767422'+',')>0
必须同行,不能折行
2.存储过程的写法
第一种写法
CREATE PROCEDURE TestIn
@strGuid varchar(500) /*strGuid 是guid列表, 类似1,2,3*/
AS
BEGIN
EXEC ('select * from Table_GuidTestIn where guid in('+@strGuid+')')
END
第二种写法
CREATE PROCEDURE [dbo].[TestInCharindex]
@strGuid varchar(500) /*strGuid 是guid列表, 类似1,2,3*/
AS
BEGIN
select * from Table_GuidTestIn where charindex(','+ltrim(guid)+',',','+@strGuid+',')>0
END
执行存储过程 TestIn 、TestInCharindex
EXEC TestIn '''FEC2C17B-6C11-49D1-9E6F-7D78230A0548'',''80AD7D07-18DE-4AB9-8CB8-9A5481AC1CFD'',''02E74C94-A4C0-40D6-A67E-FE563E767422'''
EXEC TestInCharindex 'FEC2C17B-6C11-49D1-9E6F-7D78230A0548,80AD7D07-18DE-4AB9-8CB8-9A5481AC1CFD,02E74C94-A4C0-40D6-A67E-FE563E767422'
注意:Guid比较特殊,所以在存储过程中使用IIN写法需要注意,传入的参数格式必须是
'aa57adce-0c4f-4c73-b3de-f941c7e702d5','cb4cc8bc-2f6d-4cd6-a6df-27146c9dd86e'
也就是说 string Guid=" 'aa57adce-0c4f-4c73-b3de-f941c7e702d5','cb4cc8bc-2f6d-4cd6-a6df-27146c9dd86e' ";
在上文执行存储过程 TestIn特别标注红色,提醒看文的同志们。
在执行 TestIn 如果写成以下去执行则会报错
EXEC TestIn 'FEC2C17B-6C11-49D1-9E6F-7D78230A0548,80AD7D07-18DE-4AB9-8CB8-9A5481AC1CFD,02E74C94-A4C0-40D6-A67E-FE563E767422'
如果是查询 name 这个字段则不会出现这样的错误
CREATE PROCEDURE [dbo].[TestInName]
@strName varchar(500) /*@strName 是name列表, 类似1,2,3*/
AS
BEGIN
EXEC ('select * from Table_GuidTestIn where name in('+@strName+')')
END
执行存储过程
EXEC TestInName '111,222'
备注:函数以及触发器也是同样的原理
创建一张表,然后往里面添加三笔数据CREATE TABLE Table_GuidTestIn( Guid UNIQUEIDENTIFIER PRIMARY KEY, name NVARCHAR(50)not null)insert into Table_GuidTestIn(Guid,name)values(NEWID(),'111')insert i...
SELECT a.OBJECT_ID,ROW_NUMBER() OVER (PARTITION BY a.FHMDDM,a.SHMDDM,a.SJQJRJ ORDER BY a.HH)
,a.YDH,a.FHMDDM,a.SHMDDM,a.SJQJRJ
FROM dbo.CBZD a
WHERE
a.JFZL IS NOT NULL AND
EXISTS (S...
我们知道,在
sqlserver
中一个in语句通常是这样写的:
SELECT * FROM dbo.表名 WHERE SortGID IN ('f30ce6eb-92ab-4ee8-af58-82c7a63c15b7','c98bd939-258b-43d1-8e5b-2e45fd291ef5','f30ce6eb-92ab-4ee8-af58-82c7a63c15b7')
那它在C#中如果
--今天做一个多选的功能,需要在列表把对应的文本值展现出来,表中的存字符串值(1,2,3),调用函数使用in的方式查询,但是在in中传字段是不行的。
--这边我是先把表中的字符串转成列表数据,写了一个表值函数
Create FUNCTION [dbo].[split] (
@String VARCHAR(MAX),
@Delimiter VARCHAR(MAX)
) RETURNS @temptable TABLE (items VARCHAR(MAX)) AS
BEGIN
在
存储过程
中使用IN函数,传入多个参数时,会有问题,三种解决方案:添加函数:create FUNCTION [dbo].[Split2]
@RowData varchar(max),
@SplitOn varchar(1)
RETURNS @RtnValue table
Id int identity(1,1),
Data varchar(4000)
简单来说,
存储过程
是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不于批处理。本篇主要介绍变量的使用,
存储过程
和存储函数的创建,调用,查看,修改以及删除操作。
一:
存储过程
概述
SQL Server中的
存储过程
是使用T_SQL编写的代码段。它的目的在于能够方便的从系统表中查询信息,或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是SQL Server数据库与应用程序之间的编程接口。在很多情况下,一些代码会被开发者重复编写多次,如果每次都编写相同功能的代码,不但繁琐,而且容易出错,而且由于SQL Server逐条的执行语句会降低系统的运行效率。
java 连接
sqlserver
使用的java-
sqlserver
-connect.jar包。
java连接
sqlserver
使用的jar包,包含jre7、jre8两种使用
sqlserver
.ja
SQL Server
存储过程
是一种预定义的SQL语句集,可以被多次使用,并且能够提高数据操作的效率和安全性。下面是SQL Server
存储过程
的
写法
:
第一步:创建
存储过程
CREATE PROCEDURE
存储过程
名称
(@参数名 [数据类型] = 默认值,…) AS
BEGIN
存储过程
的SQL语句
第二步:执行
存储过程
EXEC
存储过程
名称 @参数名 = 参数值
其中,@参数名是
存储过程
中定义的输入参数,[数据类型]是指该参数的数据类型,=默认值是指可以指定一个默认值,如无输入参数,则使用默认值。EXEC是执行
存储过程
的命令,@参数名=参数值是指为
存储过程
中的参数指定具体的数值。
SQL Server
存储过程
的优点是可以提高效率,减少代码量,方便维护和管理。同时,在
存储过程
中可以添加事务控制,实现数据操作的原子性、一致性、隔离性和持久性,保证数据的完整性和安全性。因此,在SQL Server数据库开发中,
存储过程
是一种非常有价值的技术。