我想更新一个表,它的一个字段是用逗号分隔的值,我想更新那个表,我厌倦了不同的代码但不能正常工作
UPDATE [PATS].[ReportSubscription]
SET [ScheduleID] = @ScheduleID
,[ReferenceID] = @ReferenceID
,[ReferenceType] = @ReferenceType
,[Schedule] = @Schedule
,[Day] = @Day
,[Time] = @Time
,[ProjectID] = @ProjectID
,[LastSentDate] = @LastSentDate
,[UserID] = @UserID
--,[CreatedBy] = @CreatedBy
--,[CreatedDate] = @CreatedDate
,[UpdatedBy] = @UpdatedBy
,[UpdatedDate] = @UpdatedDate
WHERE ID=@ID AND @Day IN (SELECT * FROM STRING_SPLIT(@Day,','))
我认为此(SELECT * FROM STRING_SPLIT(@Day,','))
应该与代码结合在一起。
答案 0 :(得分:0)
您应该从value
返回的表中选择STRING_SPLIT
:
WHERE ID=@ID AND [Day] IN (SELECT value FROM STRING_SPLIT(@Day,','))
此外,您应该将表的列[Day]
与CSV列表进行比较,而不是变量@Day
的。
但是,将CSV数据与SQL数据库混合通常不是一个好主意。如果可能,请考虑将您的CSV天列表存储在单独的表格中。
答案 1 :(得分:0)
变量中的数据可能有空格。
您应该从value
返回的表格中选择STRING_SPLIT
,并修剪用于条件的值,例如:
DECLARE @day NVARCHAR(500) = N'12 , 25, 41,54 ,89'
IF '41' IN (SELECT RTRIM(LTRIM(value)) FROM STRING_SPLIT(@Day,','))
PRINT('Ok')
ELSE
PRINT('Not Found')
-- printed : 'Ok'
答案 2 :(得分:0)
您的查询将是:
UPDATE [PATS].[ReportSubscription]
SET [ScheduleID] = @ScheduleID
,[ReferenceID] = @ReferenceID
,[ReferenceType] = @ReferenceType
,[Schedule] = @Schedule
,[Day] = @Day
,[Time] = @Time
,[ProjectID] = @ProjectID
,[LastSentDate] = @LastSentDate
,[UserID] = @UserID
,[CreatedBy] = @CreatedBy
,[CreatedDate] = @CreatedDate
,[UpdatedBy] = @UpdatedBy
,[UpdatedDate] = @UpdatedDate
WHERE ID=@ID AND Day IN (SELECT value FROM STRING_SPLIT(@Day,','))
访问https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017了解更多信息。 注意:请确保相应地修剪不需要的空格!