Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.034 c
2-1136885708
312Kbps
2006-01-10 12:35
2006.01.29
DBF файл !


3-1133512349
salexn
2005-12-02 11:32
2006.01.29
Ассинхронное получение данных в TClientDataSet


9-1121634452
LexaDup
2005-07-18 01:07
2006.01.29
Линия видимости в GLSCene


1-1135201419
Destroyer
2005-12-22 00:43
2006.01.29
Узнать каким процессом занят фаил.


3-1133244174
gvv
2005-11-29 09:02
2006.01.29
ДБФ+АДО





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский