Форум: "Начинающим";
Текущий архив: 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