Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 insert into  [new]
LisSp
Member

Откуда:
Сообщений: 186
Всем привет!
Пожалуйста, подскажите, как вставить строку в таблицу Table1 так, чтобы в поле Str1 появилось значение поля Pole1 другой таблицы Table2?

что-то типа такого....
insert into Table1 (Str1,Str2)
values(Str1 (select Pole1 from Table2), Str2)
27 май 14, 08:52    [16077038]     Ответить | Цитировать Сообщить модератору
 Re: insert into  [new]
Добрый Э - Эх
Guest
читать про insert ... select
27 май 14, 08:58    [16077057]     Ответить | Цитировать Сообщить модератору
 Re: insert into  [new]
LisSp
Member

Откуда:
Сообщений: 186
Добрый Э - Эх
читать про insert ... select


Тут вот и DROP TABLE и CREATE PROCEDURE.. и куча-куча текста.. Неужто, чтобы вставить одну строчку из уже созданной таблицы в другую, нужен такой код?


USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.EmployeeSales', 'U') IS NOT NULL
    DROP TABLE dbo.EmployeeSales;
GO
IF OBJECT_ID ('dbo.uspGetEmployeeSales', 'P') IS NOT NULL
    DROP PROCEDURE uspGetEmployeeSales;
GO
CREATE TABLE dbo.EmployeeSales
( DataSource   varchar(20) NOT NULL,
  BusinessEntityID   varchar(11) NOT NULL,
  LastName     varchar(40) NOT NULL,
  SalesDollars money NOT NULL
);
GO
CREATE PROCEDURE dbo.uspGetEmployeeSales 
AS 
    SET NOCOUNT ON;
    SELECT 'PROCEDURE', sp.BusinessEntityID, c.LastName, 
        sp.SalesYTD 
    FROM Sales.SalesPerson AS sp  
    INNER JOIN Person.Person AS c
        ON sp.BusinessEntityID = c.BusinessEntityID
    WHERE sp.BusinessEntityID LIKE '2%'
    ORDER BY sp.BusinessEntityID, c.LastName;
GO
--INSERT...SELECT example
INSERT INTO dbo.EmployeeSales
    SELECT 'SELECT', sp.BusinessEntityID, c.LastName, sp.SalesYTD 
    FROM Sales.SalesPerson AS sp
    INNER JOIN Person.Person AS c
        ON sp.BusinessEntityID = c.BusinessEntityID
    WHERE sp.BusinessEntityID LIKE '2%'
    ORDER BY sp.BusinessEntityID, c.LastName;
GO
--INSERT...EXECUTE procedure example
INSERT INTO dbo.EmployeeSales 
EXECUTE dbo.uspGetEmployeeSales;
GO
--INSERT...EXECUTE('string') example
INSERT INTO dbo.EmployeeSales 
EXECUTE 
('
SELECT ''EXEC STRING'', sp.BusinessEntityID, c.LastName, 
    sp.SalesYTD 
    FROM Sales.SalesPerson AS sp 
    INNER JOIN Person.Person AS c
        ON sp.BusinessEntityID = c.BusinessEntityID
    WHERE sp.BusinessEntityID LIKE ''2%''
    ORDER BY sp.BusinessEntityID, c.LastName
');
GO
--Show results.
SELECT DataSource,BusinessEntityID,LastName,SalesDollars
FROM dbo.EmployeeSales;
GO
27 май 14, 09:03    [16077073]     Ответить | Цитировать Сообщить модератору
 Re: insert into  [new]
LisSp
Member

Откуда:
Сообщений: 186
А как вставить значение в поле с ключом?


"Нарушение ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект"
27 май 14, 09:35    [16077167]     Ответить | Цитировать Сообщить модератору
 Re: insert into  [new]
Glory
Member

Откуда:
Сообщений: 104751
"Нарушение ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект"
Вы сообщения об ошибках вообще читаете ?

Сообщение было отредактировано: 27 май 14, 11:00
27 май 14, 11:00    [16077690]     Ответить | Цитировать Сообщить модератору
 Re: insert into  [new]
os2007
Member

Откуда:
Сообщений: 39
Если нужно встаить одну запись то можно так:

insert into Table1 (Str1,Str2)
select
(select Pole1 from Table1 where ...) , Str2

Если несколько чуть иначе


автор
"Нарушение ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект"

Означает что ты в ключевое поле вставляешь запись с уже имеющимся ключем
27 май 14, 14:10    [16079596]     Ответить | Цитировать Сообщить модератору
 Re: insert into  [new]
o-o
Guest
os2007
Если нужно встаить одну запись то можно так:

insert into Table1 (Str1,Str2)
select
(select Pole1 from Table1 where ...) , Str2


а сразу-то почему нельзя?

insert into Table1 (Str1,Str2)
select Pole1, Str2 
from Table1 where ...
27 май 14, 14:42    [16079858]     Ответить | Цитировать Сообщить модератору
 Re: insert into  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Нужно сделать <вставляемые данные> LEFT JOIN <существующая таблица> и отфильтровать то, что надо вставлять или нет.

Может быть вам нужен MERGE, чтобы отловить, какие ключи есть, их обновить, остальные вставить.
27 май 14, 15:59    [16080602]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить