Строки между двойными кавычками ""
интерполируются, означая, что они преобразуют экранированные символы в печатные символы.
Строки между одинарными кавычками ''
являются буквальными, что означает, что они обрабатываются точно так же, как и символы, введенные в них.
Вы можете иметь обе строки в одной строке:
echo '$clientid $lastname ' . "\r\n";
echo "$clientid $lastname \r\n";
выводит :
$clientid $lastname
1 John Doe
Звучит примерно правильно. Обратите внимание, что вы можете использовать SCOPE_IDENTITY ()
для каждой строки, или вы можете выполнять операции на основе наборов, если вы используете синтаксис INSERT / OUTPUT, а затем присоединяетесь к набору вывода из первой вставки - например, здесь у нас есть только 1 INSERT (каждая) в «настоящие» таблицы:
/*DROP TABLE STAGE_A
DROP TABLE STAGE_B
DROP TABLE B
DROP TABLE A*/
SET NOCOUNT ON
CREATE TABLE STAGE_A (
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE STAGE_B (
CustomerKey varchar(10),
OrderNumber varchar(100))
CREATE TABLE A (
Id int NOT NULL IDENTITY(51,1) PRIMARY KEY,
CustomerKey varchar(10),
Name varchar(100))
CREATE TABLE B (
Id int NOT NULL IDENTITY(1123,1) PRIMARY KEY,
CustomerId int,
OrderNumber varchar(100))
ALTER TABLE B ADD FOREIGN KEY (CustomerId) REFERENCES A(Id);
INSERT STAGE_A VALUES ('foo', 'Foo Corp')
INSERT STAGE_A VALUES ('bar', 'Bar Industries')
INSERT STAGE_B VALUES ('foo', '12345')
INSERT STAGE_B VALUES ('foo', '23456')
INSERT STAGE_B VALUES ('bar', '34567')
DECLARE @CustMap TABLE (CustomerKey varchar(10), Id int NOT NULL)
INSERT A (CustomerKey, Name)
OUTPUT INSERTED.CustomerKey,INSERTED.Id INTO @CustMap
SELECT CustomerKey, Name
FROM STAGE_A
INSERT B (CustomerId, OrderNumber)
SELECT map.Id, b.OrderNumber
FROM STAGE_B b
INNER JOIN @CustMap map ON map.CustomerKey = b.CustomerKey
SELECT * FROM A
SELECT * FROM B
Если вы работаете напрямую с SQL, у вас есть правильное решение.
Если вы выполняете вставку из кода, у вас могут быть структуры более высокого уровня, которые помогут вам в этом (LINQ, Модели Django и т. Д.).
Если вы собираетесь делать это в прямом SQL , Я предлагаю создать хранимую процедуру, которая принимает все данные в качестве параметров, а затем выполняет шаги вставки / выбора идентификатора / вставки внутри транзакции. Несмотря на то, что процесс остается таким же, как и при ручной вставке, использование хранимой процедуры позволит вам более легко использовать ее из вашего кода. Как упоминает @Rax, вы также можете использовать ORM для получения аналогичных функций.