Как использовать STRING_SPLIT () в запросе на обновление? - PullRequest
0 голосов
/ 06 мая 2019

Я хочу обновить таблицу. Одно из ее полей - это значение, разделенное запятыми. Я хочу обновить эту таблицу. Я устал с другим кодом, но он не работает

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,',')) должноприсоединиться с кодом.

enter image description here

Ответы [ 3 ]

0 голосов
/ 06 мая 2019

Возможно, что данные в переменной имеют пробел. Вы должны выбрать 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'
0 голосов
/ 06 мая 2019

Ваш запрос будет:

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 для получения дополнительной информации. Примечание. Обязательно выделите нежелательных пробелов соответственно!

0 голосов
/ 06 мая 2019

Вы должны выбрать value из таблицы, возвращаемой STRING_SPLIT:

WHERE ID=@ID AND [Day] IN (SELECT value FROM STRING_SPLIT(@Day,','))

Кроме того, вы должны сравнивать столбец таблицы [Day] со списком CSV, не переменная @Day.

Но обычно не стоит смешивать данные CSV с базами данных SQL. Если возможно, рассмотрите возможность сохранения своего списка дней в формате CSV в отдельной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...