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

Откуда:
Сообщений: 4
День добрый,

К сожалению, мои знания во многом базируются на давно забытом университеском курсе по SQL, MS online справочнике (которые дает основные представления, но далеко не объясняет все нюансы), и на примерах с интернета. И вот понадобилось добавить строчечки … из-за недобросовестных создателей программы по учету документооборота.


Очень прошу помочь с коррекциями к моему SQL запросу для:
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)

Задача:
Две таблицы:.
Table1 с полями: ID, ObjectID, Поле2, Поле3, Поле 4
Table2 с полями: ID2, Поле5, Поле6

Мне необходимо в одну таблицу (Table1) добавить столько строчек, сколько есть строчек в другой таблице (Table2), у которых значение одного поля (Поле6) равно 900.

В каждой вставляемой строчке (в таблицу Table1) должны быть следующие значения:
ID автоматически, ObjectID должно браться из ID2 (Таблица2), Поле2 должно оставаться пустым (=NULL), оставшиеся два поля (Поле3 и Поле4) должны иметь определенные постоянные значения (Поле3 = 400, Поле4 = 500).

Предполагаемое решение:

INSERT INTO [DocLogix].[dbo].[Таблица2]
VALUES (Поле3, Поле4, ObjectID)
SET (
400, 500,
ObjectID = (SELECT [ID2]
FROM [DocLogix].[dbo].[Таблица2]
WHERE [Поле4] = 900)
)

Мои сомнения:
- заполняются ли ID значения автоматически (таблице autonumber)?
- получают ли незаполняемые поля автоматически значения NULL?
- будут ли заведены ВСЕ необходимые строчки (это меня смущает больше всего)?

Заранее спасибо за помощь.
25 окт 09, 09:40    [7835164]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
Glory
Member

Откуда:
Сообщений: 104760
Sculptor_

Предполагаемое решение:

INSERT INTO [DocLogix].[dbo].[Таблица2]
VALUES (Поле3, Поле4, ObjectID)
SET (
400, 500,
ObjectID = (SELECT [ID2]
FROM [DocLogix].[dbo].[Таблица2]
WHERE [Поле4] = 900)
)


И откуда вы такой синтаксис выдумали ?
Обратитесь в параграф Inserting Data from Other Tables статьи хелпа INSERT Examples (Transact-SQL)
25 окт 09, 10:29    [7835198]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
Sculptor_
Member

Откуда:
Сообщений: 4
Да, спасибо конечно.
Хелпы я просмотрел и продолжаю просматривать. Замечу также,
что ссылки на хелпы в шапке форума битые, поэтому надеялся на прямые линки.


автор
Обратитесь в параграф Inserting Data from Other Tables статьи хелпа INSERT Examples


Я вполне представляю как из одной таблицы закинуть информацию в другую (хотя бы и с помощью View), но я НИГДЕ не могу найти, как объеденить SELECT с обычным мануальным вводом (если синтаксис это вообще позволяет).

То есть:
CREATE/INSERT
(Поле 1, Поле 2)
VALUES (SELECT, 300)
25 окт 09, 21:54    [7836121]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
deto4ka
Member

Откуда: Пушкин
Сообщений: 215
Не похоже, что Вы когда-нибудь видели синтаксис SQL

insert into Table1
(ObjectID, Поле3, Поле4)
select ID2, 400, 500
from Table2
where Поле6=900
Если в таблице1 поле id - identity, свершится чудо в виде автоинкремента.
Если в Поле2 допускаются null-значения, свершится еще одно чудо.
25 окт 09, 22:33    [7836181]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
Sculptor_
Member

Откуда:
Сообщений: 4
Сработает ли правильно такой запрос?

INSERT INTO Таблица1 ( Поле3, Поле4, ObjectID)
VALUES (400, 500, (SELECT ObjectID FROM Таблица2 WHERE Поле4 = 900))

То есть меня интересует:
- можно ли SELECT и числовые значения вносить вместе?
- будут ли введены все строки из Таблицы2, у которых Поле4 = 900?
26 окт 09, 11:35    [7837395]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
Glory
Member

Откуда:
Сообщений: 104760
Sculptor_
Сработает ли правильно такой запрос?

INSERT INTO Таблица1 ( Поле3, Поле4, ObjectID)
VALUES (400, 500, (SELECT ObjectID FROM Таблица2 WHERE Поле4 = 900))

То есть меня интересует:
- можно ли SELECT и числовые значения вносить вместе?
- будут ли введены все строки из Таблицы2, у которых Поле4 = 900?

- Не сработает. Неужели вы сами не попробовали ?
- Можно
- Не будут
- Вы даваемые вам ответы читаете ?
26 окт 09, 11:37    [7837405]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Sculptor_
Сработает ли правильно такой запрос?

INSERT INTO Таблица1 ( Поле3, Поле4, ObjectID)
VALUES (400, 500, (SELECT ObjectID FROM Таблица2 WHERE Поле4 = 900))

То есть меня интересует:
- можно ли SELECT и числовые значения вносить вместе?
- будут ли введены все строки из Таблицы2, у которых Поле4 = 900?
В SQL2008 - сработает.
Вообще-то, это нетрудно проверить...

Необходимо обеспечить, чтобы SELECT внутри VALUES возвращал не более одного значения.
(Если ничего не вернёт, то вставится NULL).

P.S. Может, я заблуждаюсь, потому что у меня под рукой только пропатченный сервер SQL2008 (10.0.2714.0.)
Наверно, пропатченный не до конца, но, по крайней мере, не такой, как у топикстартера...
26 окт 09, 11:46    [7837450]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Glory
- Не сработает. Неужели вы сами не попробовали ?
Я пробовал - срабатывает.
Сейчас простенький пример сделаю и выложу.
26 окт 09, 11:47    [7837458]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
Glory
- Не сработает. Неужели вы сами не попробовали ?
Я пробовал - срабатывает.
Сейчас простенький пример сделаю и выложу.
SQL2008
USE tempdb;
SET NOCOUNT ON;
IF OBJECT_ID(N'T',N'U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(ID INT NOT NULL IDENTITY, X INT, Y INT);
INSERT T(X,Y) VALUES(100, (SELECT TOP 1 object_id FROM sys.objects));
SELECT * FROM T;
IF OBJECT_ID(N'T',N'U') IS NOT NULL DROP TABLE T;
26 окт 09, 11:50    [7837477]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
Glory
Member

Откуда:
Сообщений: 104760
iap
iap
Glory
- Не сработает. Неужели вы сами не попробовали ?
Я пробовал - срабатывает.
Сейчас простенький пример сделаю и выложу.
SQL2008
USE tempdb;
SET NOCOUNT ON;
IF OBJECT_ID(N'T',N'U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(ID INT NOT NULL IDENTITY, X INT, Y INT);
INSERT T(X,Y) VALUES(100, (SELECT TOP 1 object_id FROM sys.objects));
SELECT * FROM T;
IF OBJECT_ID(N'T',N'U') IS NOT NULL DROP TABLE T;

Т.е. нужно таки чтобы кто-то сказал работает это или нет ? ;)
26 окт 09, 11:51    [7837483]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Glory,

прошу прощения, неправильно понял Ваш пост

Вы имели в виду "не сработает", потому что возвращается более одной строки,
а не потому, что SELECT в VALUES вместе с константами через запятую?

Просто я вспоминаю, что кто-то тут писал, что SELECT в VALUES в SQL2008 теперь возможен, но нельзя смешивать SELECTы с константами.
26 окт 09, 11:58    [7837522]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Glory
Т.е. нужно таки чтобы кто-то сказал работает это или нет ? ;)
А вот я и не понимаю, что мешает Sculptor_ поставить простенький эксперимент,
и всё выяснить самому?
Вот же я слепил тестовый скрипт, ушло на это две минуты.
26 окт 09, 12:01    [7837538]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
Sculptor_
Member

Откуда:
Сообщений: 4
вот на счет смешивания констант с SELECTом я и хотел узнать больше всего,
в мануалах ничего про это найти не смог.

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

В любом случае, большое спасибо, буду далее копать.
26 окт 09, 14:10    [7838575]     Ответить | Цитировать Сообщить модератору
 Re: Добавление нескольких строчек  [new]
Glory
Member

Откуда:
Сообщений: 104760
Sculptor_
вот на счет смешивания констант с SELECTом я и хотел узнать больше всего,
в мануалах ничего про это найти не смог.

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

В любом случае, большое спасибо, буду далее копать.

Да какие нафиг копии ?
DECLARE @x table(...) отменили что ли ? Чтобы элементарно синтаксис проверить
26 окт 09, 14:12    [7838605]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить