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

Откуда:
Сообщений: 38
помогите пожалуйста очень срочно надо.
create view PLUTON_WINS_2
TRUNCATE TABLE dbo.pluton_wins 
INSERT INTO dbo.pluton_wins SELECT rhost, ifield, ivalue FROM pluton_wins_1
SELECT rhost, ifield,
min(CASE WHEN id_str = 1 THEN ivalue ELSE NULL END) AS ip1, 
min(CASE WHEN id_str = 2 THEN ivalue ELSE NULL END) AS ip2, 
min(CASE WHEN id_str = 3 THEN ivalue ELSE NULL END) AS ip3, 
min(CASE WHEN id_str = 4 THEN ivalue ELSE NULL END) AS ip4
FROM dbo.Pluton_wins
GROUP BY rhost, ifield

Задача такова: нужно из запроса pluton_wins_1 вставить в таблицу pluton_wins данные предварительно очистив эту таблицу.
Этот скрипт работает прям так как мне надо, но есть одно: из него мне нужно получить результат в запрос, поэтому как процедуру я оформить его не могу. а когда сохраняю этот код он ругается на truncate. Пробовал drop table а потом заного создать таблицу, так же работает, но не сохраняет пишет что синтаксис не верен. Может быть есть команда заменяющая удаление? Или оформить как функцию? но я не силён в sql sqerver2005 поэтому функции для меня что-то очень непонятное.
Зарание всем ответившим спасибо.
24 май 13, 03:38    [14342024]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
24 май 13, 03:42    [14342025]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Alex_12095,
автор
этот код он ругается на truncate
Матом что ли ругается, почему ошибку-то не привели? Там есть варианты.

Во-первых, вы просто неправильно скопировали или и правда пытаетесь делать вставку и удаление внутри view? Если да, то почитайте документацию CREATE VIEW

Почему вы не можете использовать DELETE FROM?
24 май 13, 04:29    [14342029]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
Ruuu
Alex_12095,
автор
этот код он ругается на truncate
Матом что ли ругается, почему ошибку-то не привели? Там есть варианты.

Во-первых, вы просто неправильно скопировали или и правда пытаетесь делать вставку и удаление внутри view? Если да, то почитайте документацию CREATE VIEW

Почему вы не можете использовать DELETE FROM?


Пробовал delete from, но так как есть PK он просто удаляет значения, а при вставке новых сдвигает их, т.е. был d_str = 1 а стал 2 хотя в таблице запись только одна. Ошибка при сохранении: incorrect syntax near the keyword 'TRUNCATE'. с drop table так же
24 май 13, 04:39    [14342030]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Alex_12095,

автор
... а при вставке новых сдвигает их, т.е. был d_str = 1 а стал 2
Почему Вас это смущает? Это нормально.

Вы не ответили на второй мой вопрос: вы действительно пытаетесь сделать операции truncate, delete, drop, insert внутри view? Этого сделать нельзя, только SELECT, поэтому Вы и видите эту ошибку. А еще забыли ключевое слово AS.

Вам нужно писать хранимую процедуру.
24 май 13, 04:59    [14342034]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
Ruuu,
Процедуру нельзя так как результат я не смогу вывести в запрос. т.е. через запрос обратиться к процедуре нельзя.
Читал что можно через функцию, но незнаю как оформить данную задачу.
24 май 13, 05:07    [14342036]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
Ruuu
Почему Вас это смущает? Это нормально.

В конечном результате мне нужно вывести значение строки id_str а так как оно меняется постоянно как я его выведу?
24 май 13, 05:09    [14342039]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Alex_12095
Ruuu
Почему Вас это смущает? Это нормально.

В конечном результате мне нужно вывести значение строки id_str а так как оно меняется постоянно как я его выведу?
Так может Вам не удалять и вставлять, а обновлять эти записи?
24 май 13, 05:20    [14342041]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
Ruuu,
пробовал update-ом но что то не получалось
update dbo.PLUTON_wins
set dbo.PLUTON_WINS.IValue = dbo.PLUTON_WINS_1.IValue
SELECT rhost, ifield,
min(CASE WHEN id_str = 1 THEN ivalue ELSE NULL END) AS ip1, 
min(CASE WHEN id_str = 2 THEN ivalue ELSE NULL END) AS ip2, 
min(CASE WHEN id_str = 3 THEN ivalue ELSE NULL END) AS ip3, 
min(CASE WHEN id_str = 4 THEN ivalue ELSE NULL END) AS ip4
FROM dbo.Pluton_wins
GROUP BY rhost, ifield

Выдаёт ошибку invalid object name dbo.PLUTON_wins
24 май 13, 05:27    [14342044]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Alex_12095,

Напишите, пожалуйста, что за задача перед вами стоит и структуру таблицы dbo.pluton_wins.
24 май 13, 05:36    [14342047]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
Ruuu,
Задача такова: из запроса PLUTON_WINS_1 вывести информацию в созданную таблицу PLUTON_WINS с добавленным PK, а из этой таблицы обеспечить выборку:
SELECT rhost, ifield,
min(CASE WHEN id_str = 1 THEN ivalue ELSE NULL END) AS ip1, 
min(CASE WHEN id_str = 2 THEN ivalue ELSE NULL END) AS ip2, 
min(CASE WHEN id_str = 3 THEN ivalue ELSE NULL END) AS ip3, 
min(CASE WHEN id_str = 4 THEN ivalue ELSE NULL END) AS ip4
FROM dbo.Pluton_wins
GROUP BY rhost, ifield

а далее выборку включить в общий запрос.
По изменениям данных в общей таблице в запросе PLUTON_WINS_1 меняются значения поля IValue, то есть другими словами мне нужно что бы таблица PLUTON_WINS обновляла данные из PLUTON_WINS_1.

На счет структуры таблицы, не понял что именно вам нужно
24 май 13, 05:43    [14342051]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Alex_12095
На счет структуры таблицы, не понял что именно вам нужно
http://msdn.microsoft.com/ru-ru/library/ms178078(v=sql.105).aspx
Меню "Создать сценарий для" в "Обозревателе объектов".
Для обоих таблиц.
24 май 13, 05:53    [14342057]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Раз непонятно что такое структура таблиц просто напишите
1. Перечислите все поля таблицы dbo.pluton_wins
2. Перечислите все поля таблицы dbo.pluton_wins1


Какова ваша конечная цель ?
Вывести запросом первые 4 значения ivalue для каждой пары rhost,ifield ????
или что то еще?


Используется ли таблица dbo.pluton_wins где нибудь еще или вы её создаали только для получкения
этого результата
24 май 13, 06:54    [14342090]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
LexusR,
PLUTON_WINS
id_str smallint primary key identity(1,1) NOT NULL,
rhost varchar(255),
ifield varchar(255),
ivalue varchar(255))

PLUTON_WINS_1 - это запрос на выборку
IField varchar
Ivalue varchar
Rhost varchar
код запроса:
SELECT     dbo.Item.IField, dbo.Item.IValue, dbo.Report.RHost, MAX(dbo.Report.RDateTime) AS Expr1
FROM         dbo.Item INNER JOIN
                      dbo.Report ON dbo.Item.ReportID = dbo.Report.ID
GROUP BY dbo.Item.IField, dbo.Item.IValue, dbo.Report.RHost
HAVING      (dbo.Item.IField = 'WINS') AND (dbo.Report.RHost = 'PLUTON')

Rhost, iField будут неизменяемыми, да нужно вывести 4 первых результата поля IValue.
Таблица PLUTON_WINS создана именно для того, что бы получить результат
24 май 13, 07:15    [14342099]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
Раз Truncate table и drop table нельзя в вьюху добавить подскажите тогда как
это:
TRUNCATE TABLE dbo.pluton_wins 
INSERT INTO dbo.pluton_wins SELECT rhost, ifield, ivalue FROM pluton_wins_1
SELECT rhost, ifield,
min(CASE WHEN id_str = 1 THEN ivalue ELSE NULL END) AS ip1, 
min(CASE WHEN id_str = 2 THEN ivalue ELSE NULL END) AS ip2, 
min(CASE WHEN id_str = 3 THEN ivalue ELSE NULL END) AS ip3, 
min(CASE WHEN id_str = 4 THEN ivalue ELSE NULL END) AS ip4
FROM dbo.Pluton_wins
GROUP BY rhost, ifield

в функцию записать
24 май 13, 08:13    [14342197]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
Или как update оформить? А то ошибку выдаёт Invalid object name 'dbo.PLUTON_wins'.
24 май 13, 08:17    [14342209]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
aleks2
Guest
Alex_12095
Этот скрипт работает прям так как мне надо, но есть одно: из него мне нужно получить результат в запрос, поэтому как процедуру я оформить его не могу. а когда сохраняю этот код он ругается на truncate. Пробовал drop table а потом заного создать таблицу, так же работает, но не сохраняет пишет что синтаксис не верен. Может быть есть команда заменяющая удаление? Или оформить как функцию? но я не силён в sql sqerver2005 поэтому функции для меня что-то очень непонятное.
Зарание всем ответившим спасибо.


Запомни
1. Любые действия, изменяющие данные постоянных таблиц, доступны ТОЛЬКО В ПРОЦЕДУРАХ.
2. Процедура может вернуть "результат в запрос", ну рекордсет т.е.
24 май 13, 08:33    [14342256]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
автор
2. Процедура может вернуть "результат в запрос", ну рекордсет т.е

То есть как это? не совсем понял что вы написали...
24 май 13, 08:38    [14342282]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
я так понял что dbo.PLUTON_WINS_1 это VIEW (запрос по вашему) типа
CREATE VIEW dbo.PLUTON_WINS_1 AS
SELECT     dbo.Item.IField, dbo.Item.IValue, dbo.Report.RHost, MAX(dbo.Report.RDateTime) AS Expr1
FROM         dbo.Item 
INNER JOIN dbo.Report ON dbo.Item.ReportID = dbo.Report.ID
GROUP BY dbo.Item.IField, dbo.Item.IValue, dbo.Report.RHost
HAVING      (dbo.Item.IField = 'WINS') AND (dbo.Report.RHost = 'PLUTON')


тогда и dbo.PLUTON_WINS можно сделать в виде VIEW
CREATE VIEW dbo.PLUTON_WINS AS
SELECT rhost, ifield
,min(CASE WHEN id_str = 1 THEN ivalue ELSE NULL END) AS ip1 
,min(CASE WHEN id_str = 2 THEN ivalue ELSE NULL END) AS ip2 
,min(CASE WHEN id_str = 3 THEN ivalue ELSE NULL END) AS ip3 
,min(CASE WHEN id_str = 4 THEN ivalue ELSE NULL END) AS ip4
FROM
(SELECT rhost, ifield, ivalue, ROW_NUMBER()OVER(PARTITION BY rhost, ifield ORDER BY ivalue) AS id_str
 FROM dbo.PLUTON_WINS_1
)T
24 май 13, 08:39    [14342287]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
LexusR
я так понял что dbo.PLUTON_WINS_1 это VIEW (запрос по вашему) типа
CREATE VIEW dbo.PLUTON_WINS_1 AS
SELECT     dbo.Item.IField, dbo.Item.IValue, dbo.Report.RHost, MAX(dbo.Report.RDateTime) AS Expr1
FROM         dbo.Item 
INNER JOIN dbo.Report ON dbo.Item.ReportID = dbo.Report.ID
GROUP BY dbo.Item.IField, dbo.Item.IValue, dbo.Report.RHost
HAVING      (dbo.Item.IField = 'WINS') AND (dbo.Report.RHost = 'PLUTON')


тогда и dbo.PLUTON_WINS можно сделать в виде VIEW
CREATE VIEW dbo.PLUTON_WINS AS
SELECT rhost, ifield
,min(CASE WHEN id_str = 1 THEN ivalue ELSE NULL END) AS ip1 
,min(CASE WHEN id_str = 2 THEN ivalue ELSE NULL END) AS ip2 
,min(CASE WHEN id_str = 3 THEN ivalue ELSE NULL END) AS ip3 
,min(CASE WHEN id_str = 4 THEN ivalue ELSE NULL END) AS ip4
FROM
(SELECT rhost, ifield, ivalue, ROW_NUMBER()OVER(PARTITION BY rhost, ifield ORDER BY ivalue) AS id_str
 FROM dbo.PLUTON_WINS_1
)T


Буква Т в конце это вы случайно поставили или так должно быть?
24 май 13, 08:45    [14342314]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Alex_12095
автор
2. Процедура может вернуть "результат в запрос", ну рекордсет т.е

То есть как это? не совсем понял что вы написали...

http://msdn.microsoft.com/ru-ru/library/dd776381(v=sql.105).aspx#OtherTables

Сообщение было отредактировано: 24 май 13, 08:46
24 май 13, 08:46    [14342319]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
tpg,
Вы поймите меня правильно в sql server я второй день, и перейдя по той ссылке что вы мне дали я мало что понял, для меня это разовая задача не хотелось бы это всё узнавать что бы потом так же забыть
24 май 13, 08:49    [14342326]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Alex_12095
tpg,
Вы поймите меня правильно в sql server я второй день, и перейдя по той ссылке что вы мне дали я мало что понял, для меня это разовая задача не хотелось бы это всё узнавать что бы потом так же забыть
Ну, так наймите специалиста на пару дней. Делов то...
24 май 13, 08:54    [14342344]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
Alex_12095
Member

Откуда:
Сообщений: 38
tpg,
Ну так были бы деньги я бесплатно работаю.
24 май 13, 08:56    [14342353]     Ответить | Цитировать Сообщить модератору
 Re: Чем можно заменить Truncate  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Alex_12095
tpg,
Ну так были бы деньги я бесплатно работаю.
Ну, тогда доку изучайте.
24 май 13, 09:07    [14342406]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить