Как обновить таблицу со списком значений в T-SQL? - PullRequest
2 голосов
/ 02 мая 2011

У меня есть таблица, для которой я хочу обновить записи отношений один ко многим.Таблица определений:

CREATE TABLE CT_ProductFailures 
( 
PFID int identity(1,1) PRIMARY KEY NOT NULL, 
Old_Modes varchar(75), 
New_Modes varchar(75) 
) 

Теперь я хочу добавить записи для New_Mode 'N1' с Old_Modes 'A', 'B', 'C'.Как мне достичь этого, кроме выполнения отдельных операторов вставки?

Ответы [ 4 ]

2 голосов
/ 02 мая 2011

Если вы используете SQL Server 2008, вы можете сделать это довольно легко, используя синтаксис, подобный следующему

INSERT INTO CT_ProductFaiures (Old_Modes, New_Modes)
VALUES ('N1', 'A'), ('N1', 'B'), ('N1', 'C');

Это предполагает, что PFID автоматически увеличивается.

Вы можете использовать UNIONS, что-то вроде достиженияэто в старых версиях.Проверьте ссылку ниже для больших примеров.

http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row-constructor/

1 голос
/ 02 мая 2011

Райан,

Вы говорите: «Вместо этого я хочу скопировать этот список, так что все, что мне нужно сделать, это добавить одинарные кавычки вокруг каждой записи».Непонятно, как форматируется ваш список.

Предположим, у вас есть такой список (значения через запятую)

N1, A
N1, B
N1, C

Что вы можете сделать:

  1. Скопируйте / вставьте список в SQL Server Management Studio
  2. Запустите некоторые замены с помощью регулярных выражений:

    • нажмите Ctrl + H, чтобы открытьДиалоговое окно «Найти и заменить»
    • в опциях поиска выберите «Использовать регулярные выражения»
    • Найти что: [^] Заменить на: [(') Нажмите «Заменить все» Не вводите квадратные скобки. Я использовал их, чтобы убедиться, что вы видите пробелы!
    • Найдите что: [$] Заменить на: ['),] Нажмите' Заменить все'
    • Найдите что: [,] Заменить на: [', '] Нажмите «Заменить все»
    • Удалите последнюю лишнюю запятую

    В итоге вы получите список, подобный следующему:

    ('N1', 'A'),
    ('N1', 'B'),
    ('N1', 'C')
    
  3. Затем добавьте оператор вставки вверху скрипта:

    insert into CT_ProductFaiures (Old_Modes, New_Modes)
    values 
    

Итак, в результате у вас есть это

insert into CT_ProductFaiures (Old_Modes, New_Modes)
values 
('N1', 'A'),
('N1', 'B'),
('N1', 'C')

Надеюсь, что это то, что вам нужно.

[Отредактировано]Извините, не обратил внимания.Итак, список отформатирован так: A, B, C, D.Затем вы просто заменяете [,] на ['), (' N1 ','] без каких-либо регулярных выражений.Также исправьте начальное и конечное значение вручную.

1 голос
/ 02 мая 2011
INSERT INTO CT_ProductFailures (New_Modes, Old_Modes)
SELECT n.New_Modes, o.Old_Modes
FROM (SELECT 'N1' New_Modes) n
CROSS JOIN (SELECT 'A' Old_Modes
    UNION ALL SELECT 'B'
    UNION ALL SELECT 'C') o

В качестве альтернативы напишите функцию разделения , используя перевод строки в качестве разделителя:

INSERT INTO CT_ProductFailures (New_Modes, Old_Modes)
SELECT 'N1' New_Modes, o.value Old_Modes
FROM dbo.split(
'A
B
C') o
0 голосов
/ 02 мая 2011

Создайте таблицу NewTable с записями A B C с другим полем New_Modes.

Используйте эту таблицу в вашей команде вставки.

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