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数据库开发中, 存储过程 是一种非常有价值的技术。