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

Откуда: Moldova
Сообщений: 40
Добрый вечер

DECLARE @t TABLE
(
Id INT
)

// манипулции, @t запоняется цифрами (записей > 1)
// теперь нужно вставить данные в табличку, только если колонка уже его не содержит (значение из @t.[Id])

INSERT INTO [Favorites]
(
[PersonId]
,[FirstName]
,[LastName]
)
VALUES
(
значение из @t
,'Костя'
,'Цзю'
)

Костя не должен попасть в [Favorites], если там уже есть PersonId из @t

Спасибо :-)
21 янв 13, 20:38    [13805691]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Smekalisty,
повесить триггер к табл Favorites не вариант?
21 янв 13, 21:20    [13805774]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
Smekalisty
Member

Откуда: Moldova
Сообщений: 40
Неа
Там можно как-то IF NOT EXISTS но у меня для массива записей не получается (
21 янв 13, 22:07    [13805904]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
Smekalisty
Там можно как-то IF NOT EXISTS но у меня для массива записей не получается (
Для массива нужно не писать "IF", а добавить NOT EXISTS в условие запроса.

Открываете хелп, вводите слово EXISTS, читаете пример Г)
хелп, пример Г
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p 
JOIN HumanResources.Employee AS e
   ON e.BusinessEntityID = p.BusinessEntityID 
WHERE NOT EXISTS
(SELECT *
   FROM HumanResources.Department AS d
   JOIN HumanResources.EmployeeDepartmentHistory AS edh
      ON d.DepartmentID = edh.DepartmentID
   WHERE e.BusinessEntityID = edh.BusinessEntityID
   AND d.Name LIKE 'P%')
ORDER BY LastName, FirstName
21 янв 13, 22:47    [13806050]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
Smekalisty
Member

Откуда: Moldova
Сообщений: 40
А Insert?
Непонятно, как Insert прикручивать к этому коду?
21 янв 13, 23:19    [13806143]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
Smekalisty
А Insert?
Непонятно, как Insert прикручивать к этому коду?
INSERT пишется перед SELECT.

Да, я для вас наверняка будет открытием, что если набрать в хелпе слово INSERT, можно увидеть массу примеров, допустим:
INSERT INTO dbo.EmployeeSales
    SELECT 'SELECT', e.BusinessEntityID, c.LastName, sp.SalesYTD 
    FROM HumanResources.Employee AS e
        INNER JOIN Sales.SalesPerson AS sp
        ON e.BusinessEntityID = sp.BusinessEntityID 
        INNER JOIN Person.Person AS c
        ON e.BusinessEntityID = c.BusinessEntityID
    WHERE e.BusinessEntityID LIKE '2%'
    ORDER BY e.BusinessEntityID, c.LastName;


Только обращаю внимание, что хорошей практикой является перечисление полей в INSERT, т.е. лучше писать так:
INSERT INTO MyTable (LocationID, CostRate, ModifiedDate)
    SELECT LocationID, CostRate, GETDATE() FROM Production.Location
    WHERE CostRate > 0;
21 янв 13, 23:26    [13806160]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Вроде надо было insert values прикрутить. тогда
if not exists(select null from @table t where t.Id = @id)
  insert into Favorites values (@id,...)
22 янв 13, 00:02    [13806330]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
ну, или "from Favorites t"
22 янв 13, 00:07    [13806346]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
ITHunter
Member

Откуда:
Сообщений: 101
Smekalisty
Добрый вечер

DECLARE @t TABLE
(
Id INT
)

// манипулции, @t запоняется цифрами (записей > 1)
// теперь нужно вставить данные в табличку, только если колонка уже его не содержит (значение из @t.[Id])

INSERT INTO [Favorites]
(
[PersonId]
,[FirstName]
,[LastName]
)
VALUES
(
значение из @t
,'Костя'
,'Цзю'
)

Костя не должен попасть в [Favorites], если там уже есть PersonId из @t

Спасибо :-)



INSERT INTO [Favorites]
(
[PersonId]
,[FirstName]
,[LastName]
)
select id
,'Костя'
,'Цзю'
from @t
22 янв 13, 12:48    [13808445]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
ITHunter
Member

Откуда:
Сообщений: 101
ITHunter
Smekalisty
Добрый вечер

DECLARE @t TABLE
(
Id INT
)

// манипулции, @t запоняется цифрами (записей > 1)
// теперь нужно вставить данные в табличку, только если колонка уже его не содержит (значение из @t.[Id])

INSERT INTO [Favorites]
(
[PersonId]
,[FirstName]
,[LastName]
)
VALUES
(
значение из @t
,'Костя'
,'Цзю'
)

Костя не должен попасть в [Favorites], если там уже есть PersonId из @t

Спасибо :-)



INSERT INTO [Favorites]
(
[PersonId]
,[FirstName]
,[LastName]
)
select id
,'Костя'
,'Цзю'
from @t

пардон, не дочитал. Вот так:
INSERT INTO [Favorites]
(
[PersonId]
,[FirstName]
,[LastName]
)
select id
,'Костя'
,'Цзю'
from @t
where id not in (select [PersonId] from [Favorites] )
22 янв 13, 12:50    [13808475]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL Помогите составить запрос  [new]
Smekalisty
Member

Откуда: Moldova
Сообщений: 40
*YAHOO* *YAHOO* *YAHOO* *YAHOO*
Спасибо большое, очень компакто и просто оказалось

А я сижу мучаюсь с JOIN-ами и никак сделать не могу, тяжко мне дается SQL

Ещё раз спасибо!!!
22 янв 13, 13:05    [13808589]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить