Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как проверить,есть ли такая процедура в базе? 
V
    Опции темы
4ybaka
Дата 19.10.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



при инсталяции процедуры,необходимо проверить,есть ли уже процедура с таким именем.как это можно сделать?


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
4ybaka
Дата 19.10.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



нашел такую вещь:
Код

IF EXISTS (SELECT * FROM sysobjects 
WHERE id = object_id('ShippedOrdersDiff') 
and OBJECTPROPERTY(id, 'IsProcedure') = 1)
DROP proc ShippedOrdersDiff

GO
create proc ShippedOrdersDiff

но на это ругется...
Цитата

There is already an object named 'ShippedOrdersDiff' in the database.

условие проверял отдельно - процедуру находит... smile 


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Servena
Дата 20.10.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Попробуй так:
Код

USE [Northwind]
IF EXISTS (SELECT * FROM sysobjects 
WHERE id = object_id('CustOrderHist') 
and OBJECTPROPERTY(id, 'IsProcedure') = 1)
DROP proc CustOrderHist
GO
USE [Northwind]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[CustOrderHist] @CustomerID nchar(5)
AS
SELECT ProductName, Total=SUM(Quantity)
FROM Products P, [Order Details] OD, Orders O, Customers C
WHERE C.CustomerID = @CustomerID
AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID
GROUP BY ProductName

В качестве примера используется процедура с БД Northwind. Используй побольше Гоу.
PM MAIL   Вверх
4ybaka
Дата 20.10.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



сделал по аналогии:
Код

USE [Northwind]
IF EXISTS (SELECT * FROM sysobjects 
WHERE id = object_id('ShippedOrdersDiff') 
and OBJECTPROPERTY(id, 'IsProcedure') = 1)
DROP proc ShippedOrdersDiff
GO
USE [Northwind]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create proc [dbo].[ShippedOrdersDiff]
        @Days int = 35
AS
select OrderID 
from Orders
where ShippedDate is null or datediff(day,OrderDate,ShippedDate)>@Days

но всеравно не работает!хотя предложенный вариант нормльно все делает...

Это сообщение отредактировал(а) 4ybaka - 20.10.2007, 11:01


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Servena
Дата 20.10.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Ответ мне не понятен - так работает или нет?
Кстати, твой код у меня запускается и работает нормально: создает процедуру, удаляет и потом опять создает. У меня 2005 сервер. 
PM MAIL   Вверх
LuMee
Дата 20.10.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

Репутация: нет
Всего: 1



Имхо, проще всего так:
Код

IF OBJECT_ID('имяХранимойПроцедуры', 'P') IS NOT NULL
    -- процедура существует - можно ее грохнуть, например
    DROP PROCEDURE [имяХранимойПроцедуры]
ELSE
BEGIN
   -- не, не существует
   CREATE PROCEDURE [имяХранимойПроцедуры] ...
END

P.S. Проверено в SQL Server 2005
PM MAIL   Вверх
4ybaka
Дата 20.10.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



ага,спасибо,работает smile 


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0937 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.