創建一張表,然後往裏面添加三筆數據
CREATE TABLE Table_GuidTestIn
(
Guid UNIQUEIDENTIFIER PRIMARY KEY,
name NVARCHAR(50)not null
)
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'
備註:函數以及觸發器也是同樣的原理