Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

mssqlserver & sql-запросы   Найти похожие ветки 

 
tv   (2006-01-09 18:18) [0]

как проверить, что таблица существует на сервере?
т.е мне нужно создать таблицу, только если она не существует.


 
Zz_   (2006-01-09 18:44) [1]

Спроси сервер
[code]
use pubs
go
select isnull(object_id(N"dbo.authors", "U"),0)
[/code]


 
paul_k ©   (2006-01-10 12:22) [2]

tv   (09.01.06 18:18)
Усть така табличка sysobjects если в ней есть запись с name="yor_table_name" и типом "U" то така табличка существует
а если не поленится и вумную книжицу апро это почитать (Хелп от Квери Аналайзера к примеру) то много интересных возможностей откроется


 
Ega23 ©   (2006-01-10 14:04) [3]


if exists (select 1
           from  sysobjects
          where  id = object_id("Имя_Твоей_Таблицы")
           and   type = "U")
  drop table ISSComputer
go


 
Johnmen ©   (2006-01-10 14:31) [4]

Ничего проверять не надо.
Просто выполнить запрос создания таблицы.
И, ес-но, поместить вып-ие в try.


 
Ega23 ©   (2006-01-10 15:33) [5]


> Ничего проверять не надо.
> Просто выполнить запрос создания таблицы.
> И, ес-но, поместить вып-ие в try.
>


Жень, а таблицы с клиента создаёшь???

З.Ы.
вып-ие ?
Много думал. Только похабщина в голову лезет...  :-)


 
Fay ©   (2006-01-10 15:33) [6]

2 Johnmen ©   (10.01.06 14:31) [4]
> Просто выполнить запрос создания таблицы.
Это ничего не даст.

З.Ы.
Правильный ответ в [1].


 
Ega23 ©   (2006-01-10 15:36) [7]


> Правильный ответ в [1].


С клиента такой запрос не пройдёт.


 
Johnmen ©   (2006-01-10 15:38) [8]

>Ega23 ©   (10.01.06 15:33) [5]

Нет, я ничего не создаю...
Мне казалось, что мы в контексте программирования на Delphi обсуждаем.
Вобщем, не совсем уловил, что ты имел в виду...

>Fay ©   (10.01.06 15:33) [6]
>Это ничего не даст.

Совсем? Почему?


 
Ega23 ©   (2006-01-10 15:41) [9]


> Вобщем, не совсем уловил, что ты имел в виду...
>


Я имел ввиду развёртывание БД. Теоретически, "загонялку" можно и с клиента делать, но, как правило, скрипты на создание БД больно сложные, а при выполнении их с клиента стандартными средствами существует много ограничений, например на GO.


 
Vlad ©   (2006-01-10 15:45) [10]


> Ega23 ©   (10.01.06 15:41) [9]

а GO это вобще левый оператор, никоем образом не относящийся к Transact SQL.
А вот почему скрипт не пойдет с клиента, я что-то тоже не понял...
Хотя, не проверял.


 
Fay ©   (2006-01-10 15:50) [11]

2 Ega23 ©   (10.01.06 15:36) [7]
Предпллагается, что у автора хватит ума оставить только select...

2 Johnmen ©   (10.01.06 15:38) [8]
> Совсем? Почему?
Это не будет проверкой существования таблицы.


 
Johnmen ©   (2006-01-10 15:53) [12]

>Ega23 ©   (10.01.06 15:41) [9]

Сколько делал, никаких сложностей.
Снимаем скрипт создания с существующей БД, убираем GO, прописываем в CommandText и т.д.
(ес-но АДО)


 
Johnmen ©   (2006-01-10 15:53) [13]

>Fay ©   (10.01.06 15:50) [11]
>Это не будет проверкой существования таблицы.

А что же это будет?


 
Vlad ©   (2006-01-10 15:58) [14]


> Johnmen ©   (10.01.06 15:53) [12]


> Снимаем скрипт создания с существующей БД, убираем GO, прописываем
> в CommandText и т.д.

Ты про ADOCommand?
Я тут через него недавно пробовал скрипт запускать(MSSQL), мне показалось что он глушит эксепшны. Во всяком случае скрипт с ошибкой спокойно проходил через try..except. Особо не разбираясь, переделал на ADOQuery, стало все в порядке..


 
Johnmen ©   (2006-01-10 16:03) [15]

>Vlad ©   (10.01.06 15:58) [14]
>Ты про ADOCommand?

Ну да.
Всё нормально. Ошибки и синтаксиса и выполнения ловились try"ем.


 
sniknik ©   (2006-01-10 16:07) [16]

Vlad ©   (10.01.06 15:58) [14]
ADOQuery по ExecSQL выполняет запрос во "встроенной" в него компоненте ADOCommand...
посмотри исходники ADODB.

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


 
Vlad ©   (2006-01-10 16:34) [17]


> sniknik ©   (10.01.06 16:07) [16]

Ну да, проверять не буду, охотно верю :-)
Но ситуация реально была, когда один и тот же скрипт через ADOQuery давал эксепшн, а через ADOCommand благополучно выполнялся (на самом деле профайлер показывал ошибку). Хотел тогда еще сюда вылезти с вопросом, да что-то забил на это дело...


 
Ega23 ©   (2006-01-10 17:13) [18]


> Vlad ©   (10.01.06 15:45) [10]
>
> А вот почему скрипт не пойдет с клиента, я что-то тоже не
> понял...


А из-за GO и не пойдёт. Это же, по сути, Commit.


 
Ega23 ©   (2006-01-10 17:14) [19]


> лучше написать свой простой выполнитель скриптов где делить
> по тому же GO скрипт на команды и выполнять их последовательно.
>
>


А нафига велосипед изобретать? Есть же isql ?


 
sniknik ©   (2006-01-10 17:45) [20]

> А нафига велосипед изобретать? Есть же isql ?
удобно, при частом выполнении скриптов (которые обычно генерятся в QA) из своей программы. причем довольно часто с клиента. (у тебя часто на клиенте isql лежит?)

да и изобретать то там особо нечего, 20-30 строк кода.


 
Vlad ©   (2006-01-10 17:49) [21]


> Ega23 ©   (10.01.06 17:13) [18]


> А из-за GO и не пойдёт. Это же, по сути, Commit.

Да я не про [1] говорю, а в принципе про CREATE TABLE запущенный с клиента. GO естественно туда не надо :-)


 
Ega23 ©   (2006-01-10 17:54) [22]


> удобно, при частом выполнении скриптов (которые обычно генерятся
> в QA) из своей программы. причем довольно часто с клиента.
>  (у тебя часто на клиенте isql лежит?)


isql - он вместе с ClientConnectivity ставится?


> Да я не про [1] говорю, а в принципе про CREATE TABLE запущенный
> с клиента. GO естественно туда не надо :-)


Это надо полные права на базу иметь. У клиента - далеко не всегда.  :о)


 
sniknik ©   (2006-01-10 18:13) [23]

> isql - он вместе с ClientConnectivity ставится?
вряд ли. не в курсе. на "чистой" машине (с только поставленной виндой) точно нет. а программа(моя) из которой может потребоваться чтонибудь создать уже может стоять.

> Это надо полные права на базу иметь. У клиента - далеко не всегда.  :о)
у меня практически всегда в программах минимум 2 режима - юзер, админ. и неважно где она физически расположена. у админа должны быть права на базу. (и ему, если что, не приходится нестись на сервер и т.д., вообще напрягаться, даже из программы не нужно выходить)

p.s. не надо "тянуть" свои представления на всех. так как у меня работает всех наших клиентов устраивает. если у тебя по другому, и твоих устраивает... то и флаг тебе в руки. ;)


 
Fay ©   (2006-01-16 11:36) [24]

2 Johnmen ©   (10.01.06 15:53) [13]
Проверкой возможности создать таблицу с таким именем.


 
Ega23 ©   (2006-01-16 11:43) [25]


> не надо "тянуть" свои представления на всех. так как у меня
> работает всех наших клиентов устраивает. если у тебя по
> другому, и твоих устраивает... то и флаг тебе в руки. ;)


Вот это правильно.



Страницы: 1 вся ветка

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.052 c
1-1135272387
GEN++
2005-12-22 20:26
2006.01.29
Точка останова в DLL


15-1136983081
вразлет
2006-01-11 15:38
2006.01.29
Sound


3-1133363995
keal
2005-11-30 18:19
2006.01.29
как востановить данные после delete?


1-1133945910
Мастер Ломастер
2005-12-07 11:58
2006.01.29
Символ в нижнем или верхнем индексе?


15-1136442827
lookin
2006-01-05 09:33
2006.01.29
Сегодня финал МЧМ по хоккею: Россия - Канада