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

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Добрый день, уважаемые форумчане!

1) Когда-то я изменил стандартные сообщения об ошибках SQL Server (так сказать пользовательские сообщения), код которых начинаются на 50000. Проводил разные эксперименты, ну и забыл исправить их. Теперь собственно и выходят эти некорректные сообщения. Как их редактировать? Забыл, как это делается, не могу вспомнить. Давно не пользовался.

2) Таблица имеет триггер на ввод и обновление, который при определённых условиях вносит изменения в другую таблицу. И в другой таблице есть триггер. Как временно отключить триггер второй таблицы, когда заработает триггер первой таблицы? Я собственно использовал DISABLE TRIGGER и в конце ENABLE TRIGGER. Но оказывается для этого нужно давать специальные права рядовому пользователю. Какое право для этого требуется?
6 янв 11, 09:41    [10037162]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
1)
sp_altermessage
6 янв 11, 09:59    [10037186]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Дедушка
1)
sp_altermessage


Спасибо.
6 янв 11, 10:04    [10037194]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Ещё один вопрос.
Как получить весь список пользовательских сообщений с кодами (каких я наплодил)?
Хотелось бы всех сообщений просмотреть и удалить лишних.
6 янв 11, 10:11    [10037205]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
studieren
Как получить весь список пользовательских сообщений с кодами (каких я наплодил)?
Хотелось бы всех сообщений просмотреть и удалить лишних.

вьюха sys.messages
6 янв 11, 10:14    [10037208]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Thanks.

А по 2-вопросу что-нибудь есть? В смысле как временно блокировать триггер?
6 янв 11, 10:28    [10037232]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
studieren
А по 2-вопросу что-нибудь есть? В смысле как временно блокировать триггер?

[imho]
задуматься об архитектуре системы
[/imho]
6 янв 11, 10:46    [10037269]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
studieren
Thanks.

А по 2-вопросу что-нибудь есть? В смысле как временно блокировать триггер?
Использовать в IFе TRIGGER_NESTLEVEL (Transact-SQL)?
6 янв 11, 11:42    [10037363]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Уважаемые форумчане!
У меня несколько вопросов.

1) MS SQL Server 2008 (R2) установлен на серверную машину. Все клиентские машины коннектятся к базе данных через Named Pipe, но только 1 машина почему-то только через TCP/IP. У всех клиентских машин одинаковая версия Win XP (SP2). Почему только 1 машина не может связаться со сервером через Named Pipe? В каких настройках винда надо порыться? Может быть где-то реестр надо подкорректировать?

2) Одна организация попросила установить БД. У меня был готовый проект, в принципе могу установить им, но только я при проектировании никак не учёл (да и не мог учесть) одну особенность данной организации:
оказывается у этой организации есть мощная серверная машина, все филиалы (а их порядка 5 или 6) связаны с этим сервером. И что для меня было сюрпризом у всех тонкий клиент, т.е. без процессоров. Я должен установить БД для каждого филиала отдельно. Мой проект состоит из 2 БД: 1 - основная, где таблицы с данными, а 2 - все другие объекты БД (View, ХП, функции), а также временные таблицы для сложных отчётов. В связи с этим у меня возникла проблема: как я могу установить в одной машине для каждого филиала свою базу? У меня конфликт имен.
Я сам полагаю, что у меня есть 2 варианта выхода:
1) установить Instance SQL Server ровно столько, сколько филиалов в одной машине;
2) переименовать базу, добавив что-то вроде "f1", "f2" и т.д.
1-вариант мне кажется чересчур ресурсоёмкий, так итак серверная машина испытывает большую нагрузку.
2-вариант требует изменения почти всех объектов 2-БД для каждого филиала, что чрезвычайно не удобно для меня. Да и обслуживания баз будет не удобным: если внести изменения, то придётся иметь 6-вариантов скрипта.
Собственно вопрос: как выйти из ситуации? Между филиалов общих данных нет, в смысле у каждого своя таблица со своими данными и они не должны иметь доступа друг-другу.
Есть конечно ещё 1 вариант: нужно во всех таблицах добавить поле что-то вроде "FilialID", но тогда я должен пересмотреть всю базу, придумать во всех запросах Row Security. А это почти всё равно, что переписать всю базу. Больше всего этого не хочется. :(
Может гуру мне посоветует более прогрессивный способ решения данной проблемы?
Заранее благодарю за помощь / подсказку / совет.
28 фев 11, 13:01    [10299508]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
l_slava
Member

Откуда:
Сообщений: 17
studieren,

Создать отдельную схему для каждого филиала. Но при этом все равно нужно проверить код, что-бы не было обращения к объектам вида dbo.[имя объекта]
1 мар 11, 15:35    [10306802]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Уважаемые гуру!

Есть у меня проблема. Я в обычный юзерский комп установил SQL Server 2008 (R2) Exp. Edition. А у компа установлена ОС WinXP. В принципе базы на сервере небольшие. Express версия вполне приемлема. Я подключил юзеров через ODBC где-то порядка 20. Все они в одно и то же время сразу в принципе не работают, но когда больше 10, то WinXP не позволяет подключиться к базе. Я раньше думал, что ограничение макс. 10 юзеров касается только расшаренных папок, но оказывается это касается и SQL Server.
Вот собственно и мой вопрос: как-нибудь обойти это ограничение возможно? Ну допустим что-то вроде прокси-сервер соорудить. Или такое в принципе невозможно?

P.S. Есть конечно и такой выход: снести ОС и поставить Win Server, но в том компе столько много программ придётся переустанавливать и перенастраивать, аж сутки не хватит. Вообще не хотелось бы пойти таким путём. Но если это единственное решение ... :((
А может кто-то уже сталкивался с такой ситуацией и каким-то нестандартным образом выкрутился? Напишите please!
17 мар 11, 09:20    [10383298]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
Glory
Member

Откуда:
Сообщений: 104751
studieren
Уважаемые гуру!

Есть у меня проблема. Я в обычный юзерский комп установил SQL Server 2008 (R2) Exp. Edition. А у компа установлена ОС WinXP. В принципе базы на сервере небольшие. Express версия вполне приемлема. Я подключил юзеров через ODBC где-то порядка 20. Все они в одно и то же время сразу в принципе не работают, но когда больше 10, то WinXP не позволяет подключиться к базе. Я раньше думал, что ограничение макс. 10 юзеров касается только расшаренных папок, но оказывается это касается и SQL Server.
Вот собственно и мой вопрос: как-нибудь обойти это ограничение возможно? Ну допустим что-то вроде прокси-сервер соорудить. Или такое в принципе невозможно?

Смените протокол подключения с NamedPipes на TCPIP
17 мар 11, 09:24    [10383315]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
studieren, легальных способов нет. Не совсем легальные - ищите сами))). Ключевые слова для поиска: "half open limit"
17 мар 11, 09:27    [10383330]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Glory,

Спасибочки, щас попробую. Очень надеюсь, что это панацея.
17 мар 11, 09:27    [10383331]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Glory, THANK YOU VERY, VERY, VERY MUCH!!!
Вы меня избавили от такого кошмара и ужаса, как переустановка ОС!!!
Я протестировал, больше 10 юзеров спокойно могут подключиться к различным базам и у всех программа работает на ура!!!
Спасибо ПРЕОГРОМНОЕ! Дай Бог Вам здоровье! :)
18 мар 11, 06:48    [10389397]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Можно ли создать табличную функцию с динамически изменяемыми столбцами?

Дело в том, что я хочу создать представление, которое помимо куча полей из таблиц будет вытаскивать часть данных из функции. Данные, извлекаемые из таблиц получаются обновляемыми, а вот та часть, которая извлекается из функции, то они как раз не обновляемые у меня. Я для таких случаях соорудил триггер INSTEAD OF, который вносит соответствующие изменения в БД. Все работает как запланировано, всё нормально. Но вот с функциями с динамически изменяемыми столбцами у меня не получается. Хотел бы хранимую процедуру использовать, но в представлениях нельзя. На крайняк можно использовать "OPENROWSET", но хотелось бы избежать такого решения.
Может кто-то предложит идею по "светлее"?
Заранее благодарю откликнувшихся. :)
13 апр 11, 08:51    [10510066]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Уважаемые форумчане!
Можно ли в обычном запросе SELECT указать не название поля, а порядковый номер столбца (поля)? Как выглядит синтаксис в таких случаях?
Ну, к примеру, ORDER BY можно отсортировать и по порядковому номеру столбца. Мне кажется, что я где-то видел это. Может быть не в SQL Server, не помню.

P.S. Please, динамический запрос не предлагать. :)

Заранее благодарю за ответ / ссылку и проч. помощь.
18 апр 11, 10:53    [10532125]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
studieren,

не низя (во вском случае мне сие сделать не удалось ), ну вы и упорный однако У вас конкурс на тему - как еще написать какой нить изврат ???
18 апр 11, 10:57    [10532158]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Maxx,

Значит я видел это не в SQL Server.
Сейчас я пользуюсь вот таким кодом:
DECLARE @i Tinyint;
...
SELECT CASE @i
   WHEN 1 THEN Field1
   WHEN 2 THEN Field2
-- и т.д.
В реальной базе у меня 12 полей, а некоторые таблицы состоят аж из 29 и более полей!

А хотелось бы что-нибудь изящное, простое. Ну чтобы кода было поменьше.
Ну если другого варианта нет, то увы ... Буду дальше мучать сервера всякими кейсами. :)

А вдруг какому-нибудь умельцу удалось всё-таки соорудить такое? Нет?
18 апр 11, 11:34    [10532460]     Ответить | Цитировать Сообщить модератору
 Регулярные выражения  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Уважаемые знатоки SQL Server!
Мне нужно создать UDF функцию для проверки регулярных выражений. В VBA это очень просто. Выглядит примерно так:
Public Function RegularExp(strPattern As String, strText As String) As String
    Dim objRegExp As Object
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Global = True
    objRegExp.Pattern = strPattern
    RegularExp = objRegExp.Replace(strText, "")
End Function
Вот результат функции в окне отладки
?RegularExp("[^A-z 0-9]", "asd67%623 #1$@")
asd67623 1

Теперь всё тоже самое мне нужно соорудить на сервере.
+ версия сервера
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 2010 15:53:02 Copyright (c) Microsoft Corporation Express Edition with Advanced Services on Windows NT 6.0 <X86> (Build 6001: Service Pack 1)


Прочёл БОЛ. Обратил внимание на это.
Примечание.
Возможность SQL Server выполнять код CLR по умолчанию отключена. Можно создавать, изменять и удалять объекты базы данных, которые ссылаются на модули управляемого кода, но эти ссылки не будут выполнены в SQL Server, пока не будет включен параметр clr enabled с помощью процедуры sp_configure (Transact-SQL).

Поэтому запустил вот такой код.
sp_configure 'clr enabled', 1
Ну и всё остальное, а именно как создать CLR функцию, механизм сборки мне не совсем понятно.
Не могли бы пошагово объяснить как вышеуказанную функцию создать на сервере?

Поискал здесь на форуме, прочел множество топиков, но нигде подробно как это делается не написано.
Прочёл вот эту статью. Но и там не понял как создаются такие функции. Коды, которые указаны в этой статье я попробовал запустить на SSMS, но почему-то сервер ругается. Я так понимаю, надо сначала на Visual Studio создать нечто (я с Visual Studio не "дружу"), а потом как-то "привязать" на сервер. Так?

Заранее благодарю за помощь, подсказку.
11 сен 11, 15:20    [11260406]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
studieren
а именно как создать CLR функцию,


Си-шарпом владеете?

studieren
Коды, которые указаны в этой статье я попробовал запустить на SSMS


:) Тяжело вам будет. Для начала научитесь влет делить сырцы на C#/T-SQL.

studieren
Я так понимаю, надо сначала на Visual Studio создать нечто (я с Visual Studio не "дружу"), а потом как-то "привязать" на сервер. Так?


Правильно понимаете, причем создавать надо вовсе не нечто, а вполне определенно библиотеку классов. Она будет скомпилирована в выходной DLL-модуль, а уж последний -
автор
как-то "привязать" на сервер.

и т.д.
11 сен 11, 15:40    [11260427]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
SamMan
studieren
а именно как создать CLR функцию,


Си-шарпом владеете?

Нет. Но в принципе в VB.Net могу что-нибудь сообразить.

SamMan
studieren
Я так понимаю, надо сначала на Visual Studio создать нечто (я с Visual Studio не "дружу"), а потом как-то "привязать" на сервер. Так?


Правильно понимаете, причем создавать надо вовсе не нечто, а вполне определенно библиотеку классов. Она будет скомпилирована в выходной DLL-модуль, а уж последний -
автор
как-то "привязать" на сервер.

и т.д.

Вот в этом механизме я пока не смог разобраться. Как и что не совсем понятно.
Вот ещё кое-что нашёл: Работа с регулярными выражениями в SQL Server
Я так понимаю этот код для старой версии SQL 2000. Хранимка создалась, но вот только отказывается работать, сервер ругается так:
Msg 15281, Level 16, State 1, Procedure sp_OACreate, Line 1
SQL Server заблокировал доступ к процедура "sys.sp_OACreate" компонента "Ole Automation Procedures", поскольку он отключен в результате настройки конфигурации безопасности сервера. Использование "Ole Automation Procedures" может быть разрешено администратором при помощи хранимой процедуры sp_configure. Дополнительные сведения о включении "Ole Automation Procedures" см. в разделе "Настройка контактной зоны" в электронной документации по SQL Server.
Msg 15281, Level 16, State 1, Procedure sp_OASetProperty, Line 1


Да и мне предпочтительней именно скалярная функция, а не процедура.
Пока ищу, ищу, ищу ...
11 сен 11, 16:00    [11260470]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
studieren, http://msdn.microsoft.com/ru-ru/library/ms189876.aspx
Вообще не понял с чем у вас сложности. Возмите код из вашей же ссылки, откомпилируйте его в dll, далее подключите и используйте.
11 сен 11, 16:04    [11260480]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
studieren, если вас интересует порядок действий, то почитайте начиная отседова: 10266163
Т.е. код можно написать и без VS, откомпилировав CLR-компилятором. Но лучше всего - почитайте документацию.
11 сен 11, 16:12    [11260499]     Ответить | Цитировать Сообщить модератору
 Re: Как это делается не знаю / не помню  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
А если все же будете копать свой
автор
Msg 15281

то http://msdn.microsoft.com/ru-ru/library/ms189631.aspx

Буквы BOL вообще говорят что-нибудь?
11 сен 11, 16:15    [11260506]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить