Справка по вводу запроса SQL Server
У меня есть следующий код, который я использую в Query для обновления таблицы с именем ListClientCasePresentingIncidents, которая использует функцию fnSplit для разделения разделенного запятой nvarchar с именем @CasePresentingIncidents.
IF ( @CasePresentingIncidents <> '' ) INSERT INTO ListClientCasePresentingIncidents ( PresentingIncident , CaseID ) SELECT SplitText AS PresentingIncident , @CaseID FROM fnSplit(@CasePresentingIncidents)
Все это отлично работает по одной записи за раз, передавая значение для @CaseID и @CasePresentingIncidents.
Вопрос в том, как мне изменить этот код так, чтобы он принимал значения из таблицы ClientCase вместо двух параметров? Необходимо заменить @CaseID и @CasePresentingIncidents значениями из ClientCase.CaseID и ClientCase.CasePresentingIncidents. Большое спасибо.
- Вставьте файл клиента в столбец базы данных сервера
- Можно ли внедрить ручное приращение с помощью простого SQL INSERT?
- Почему «строковые или двоичные данные будут усечены» более описательной ошибкой?
- Microsoft Sql Management Studio, агент SQL Server, создайте вложенный массив с динамическими параметрами
- вставлять значения в значения параметров таблицы в sql-сервере
- ошибка при использовании подзапроса в операторе вставки
- SQL Server: вставить идентификатор
- Msg 207, Уровень 16, Недопустимое имя столбца 'MH380'
- SQL Server: вставьте строку в другую таблицу для каждой строки в другой таблице, которая соответствует критерию
- Синтаксис SQL Server INSERT
- Сравнение с вставкой в запрос лучше
- Как INSERT INTO в таблице 300 раз в цикле в SQL?
- Вставить скрипт для определенного набора строк в SQL
В принципе, я вижу два способа решения этого:
-
Объедините (объедините) все значения
ClientCase.CasePresentingIncidents
, которые должны быть обработаны, в одну строку и передайте их как аргументfnSplit()
(т.е.dbo.fnSplit()
?). В зависимости от того, какую версию SQL Server вы используете, вы можете рассмотреть различные способы конкатенации. Если вам понадобятся некоторые рекомендации здесь, я думаю, что это может быть хорошей отправной точкой: объединение значений строк (существует много похожих вопросов, связанных с ним и перечисленных соответственно в разделе «Связанный раздел»). -
Используйте курсор для вызова
dbo.fnSplit()
для каждой строкиClientCase
. Возможно, я должен предложить создать новую табличную функциюdbo.fnSplitMultiple()
которая будет применять этот подход. В вашем примере вы должны выбрать изdbo.fnSplitMultiple()
вместоdbo.fnSplit()
.
Если результирующая строка может быть очень длинной, то, возможно, первый метод, хотя в противном случае, вероятно, более привлекательный, не будет очень уместным. У меня не было большого опыта работы с очень длинными строками на стороне сервера, с использованием SP и функций, поэтому я не уверен, и для меня курсоры здесь были бы просто резервной.