Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Microsoft SQL Server

Автор: Megard
Дата сообщения: 16.10.2003 10:10
Спасибо! Еще вопрос. Нужно получить некое максимальное значение из N таблиц. Число N ~100. Я сделал так:
SELECT MAX(A)
FROM (SELECT MAX(pole) AS A
FROM Tab1
UNION
SELECT MAX(pole) AS A
FROM Tab2
UNION
........
UNION
SELECT MAX(pole) AS A
FROM TabN)

Может можно сделать проще?
Автор: daw
Дата сообщения: 16.10.2003 11:31

Цитата:
Может можно сделать проще?

Может быть, имеет смысл сделать представление (view) с объединением этих таблиц и выбирать максимальное значение из представления...
А так - вполне нормальный вариант.
Автор: Megard
Дата сообщения: 16.10.2003 16:02
Спасибо!. Еще вопрос. Сколько должно быть записей в таблице, чтобы при запросе вроде:
SELECT A
FROM Tabl
WHERE A=B

скажем, на пне 1000 были бы заметны "тормоза"?


Автор: v0yager
Дата сообщения: 17.10.2003 08:25
В общем случае ответа на твой вопрос не существует.

Скорость выполнения приведенного запроса зависит от множества не описанных факторов:

- тип данных поля А, наличие индексов, распределение множества значений А и т.д.
(пример, если А это пол (М-Ж, всего два значения), а Tabl - это таблица военных в БД армии, то подавляющее большинство значений А = М и толку от индекса не будет, все равно table scan)

- характеристики дисковой подсистемы (ATAPI/IDE, SCSI), RAID (нет/есть-?тип).
- расположение базы на диске, наличие "конкуренции" на сервере за ресурсы (диск,память,процессор) с другими установленными приложениями.

Для начала можно порекомендовать посмотреть план выполнения запроса в Query Analyzer и поискать table scan'ы. Дальше - по обстановке.
Автор: Megard
Дата сообщения: 17.10.2003 12:17
Ну чтобы порядок хотябы можно было оценить.
Допустим некий "среднестатистический домашний компьютер"
Все поля, допустим, char. Нормальное распределение. Никакой конкуренции за ресурсы нету. Сколько таких полей должно быть? Несколько тысяч, десятков тысяч, или больше? И на сколько критичны характеристики диска?

Добавлено
Подскажите плз, что это за индексация такая на MSMSQL? Где почитать?
Автор: Megard
Дата сообщения: 24.10.2003 15:31
Ну так знает кто-нибудь?
Автор: Bloody_Nokia_Adept
Дата сообщения: 24.10.2003 18:03
Megard

Цитата:
Ну так знает кто-нибудь?

А что знать?
1. Примерное количество записей? Глупый вопрос, который просто проигнорировали потому как определение "тормозов" очень субъективное. Какое ожидаемое время реакции и какое время реакции считается "тормозом", какая структура таблиц и связи между ними, какие типы данных и сложность запросов, какой метод выборки данных из СУБД - да существует море параметров влияющих на это. На кофейной гуще не гадаем.
2. Контекстный поиск по полям text/image? Первый появился в 7 версии, второй - в 2000. Позволяют искать по большим блокам данных с заданием части слова и учетом морфологии языка. Ключевые слова в BOL: CONTAINS, FREETEXT, MATCHES, Indexing Service и Full-Text Queries. Можешь так же в MSDN прочитать статью "Textual Searches on Database Data Using Microsoft SQL Server 7.0" и "Textual Searches on File Data Using Microsoft SQL Server 7.0". В 2000 принципиально нового ничего не появилось за исключением поиска по image.

Вопросы?
Автор: Megard
Дата сообщения: 09.11.2003 16:01
Спасибо. Вопрос еще такой:
В таблице два поля "id" и "message". При добавлении новой записи к "message", в поле "id" добавляется запись "предыдущий id+1". Если добавление "message" сделают одновременно несколько пользователей, что произойдет?
Автор: daw
Дата сообщения: 10.11.2003 07:10

Цитата:
что произойдет?

Зависит от реализации... Если id - это действительно поле-счетчик (identity) то и добавится несколько записей с последовательными id. Если же
Цитата:
добавляется запись "предыдущий id+1"
реализовывалось руками (есть любители приключений, которым идентити не нравится), то может быть всякое...
зы: кстати, в поле запись добавить нельзя - запись можно добавить в таблицу...
Автор: Megard
Дата сообщения: 17.11.2003 12:39
Спасибо, подскажите плз, как написать запрос, чтобы поле id было с auto_increment.

CREATE TABLE tab
(
id CHAR(10) NOT NULL
mess CHAR(1000)
PRIMARY KEY (id)
)
Автор: daw
Дата сообщения: 17.11.2003 15:38
никак... identity к полям типа char неприменимо....

Цитата:
The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns

но вот если поле id будет у Вас типа, скажем, int (настоятельно рекомендую, кстати!), то можно будет сделать так:

CREATE TABLE tab
(
id INT NOT NULL IDENTITY(1,1),
mess CHAR(1000)
PRIMARY KEY (id)
)
Автор: Megard
Дата сообщения: 17.11.2003 18:15
... а может в данном случае вместо INT лучше использовать numeric? Или это безразлично?
Автор: daw
Дата сообщения: 18.11.2003 07:32

Цитата:
а может в данном случае вместо INT лучше использовать numeric

А в этом есть какой-то глубокий смысл? Лично я сомневаюсь, что это чем-то будет лучше... Учтите, кстати, что identity применимо не просто к numeric, а только к numeric(p,0), то бишь, к numeric с 0 знаков после запятой...
Автор: Megard
Дата сообщения: 18.11.2003 12:39
Спасибо.
Такой вопрос. Можно средствами sql определить существует ли некая таблица или нет? Или для этого нужно "процедуру" делать?
Автор: naPmu3aH
Дата сообщения: 18.11.2003 13:59

Цитата:
Такой вопрос. Можно средствами sql определить существует ли некая таблица или нет?

Можно. Как-нибудь типа так:

Код: select * from [<database>].sysobjects tbl
where tbl.name = '<table_name>'
and tbl.type='U'
Автор: daw
Дата сообщения: 18.11.2003 14:43
например, так:

Код:
if exists(select * from sysobjects where name = 'myTable' and xtype = 'U')
select 'существует'
else
select 'не существует'
Автор: zsv
Дата сообщения: 04.12.2003 10:52
Три вопроса.
1.Запускаю сохраненную на сервере процедуру в одном потоке
.....
Form1.StoredProc1.ExecProc;
.....
Могу ли я как то остановить ее выполнение на сервере из другого потока.
2.Регистрит ли сервер как нибудь, что в данный момент времени данная сохраненная процедура выполняется.
3.Как мне после запуска сохр процедуры в приложении отслеживать, что она функционирует и связь с сервером не пропала.

Добавлено
.
Автор: Megard
Дата сообщения: 05.12.2003 14:10
Такой вопрос:
при запросе "SELECT *" к полю ntext появляется ошибка:
"Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16) in..."

Как вылечить?
Автор: MrZeRo
Дата сообщения: 05.12.2003 17:22
Megard
Может, старая клиентская часть?
Автор: Megard
Дата сообщения: 08.12.2003 16:38
Простите за глупый вопрос, а где взять новую?
Автор: naPmu3aH
Дата сообщения: 08.12.2003 17:49
Megard

Цитата:
Простите за глупый вопрос, а где взять новую?

Microsoft Data Access Components (MDAC).
Последняя версия - 2.8 [eng]
Автор: zsv
Дата сообщения: 24.12.2003 09:03
Мне нужно автоматически запускать сохраненную процедуру при старте сервера.
В книге по 7скл нашел процедуру sp_makestartup и sp_unmakestartup, но у меня на сервере (правда 2000) их нет и в хелпе они подсвечены, что их нет. Возможно вместо них в двушке что-то другое. Подскажите, как мне это сделать.
Автор: someone312002
Дата сообщения: 24.12.2003 09:35
Сделать очень просто: настрой, чтобы SQLAgent у тебя стартовался автоматом при старте самого сервера, затем, идёшь к JOB'ам, создаёшь новую задачу, в Schedule ставишь "Start automatically when SQL Server Agent starts".
Всё.

УДАЧИ!!!
Автор: zsv
Дата сообщения: 25.12.2003 15:35
Подскажите
В сохраненной процедуре создаю курсор , потом его пробегаю делая необходимые мне вещи, потом уничтожаю курсор.
Параллельно на этом же сервере, но в др базе делаю обычный селект из таблички в десять записей. Выполняется примерно столько же времени, что и время начиная с открытия курсора до его уничтожения (у меня порядка 30 сек).
То ли ресурсы все зажираются на курсор, то ли что-то еще?
Что мне делать (вариант не использовать курсоры не подходит), может как-то ресурсы проца можно принудительно распределять по другому.
Подскажите
Автор: someone312002
Дата сообщения: 26.12.2003 10:22
dbcc тебе в помощь. упорядочить "записи" в сторед груп надобно, может в этом дело ?
Автор: zsv
Дата сообщения: 27.12.2003 10:56
По предыдущему вопросу о курсорах.
Надыбал параметр Cursor Threshold, установил в 0, как там написано для создания асинхронного немешающего другим запросам курсора. И все равно не помогло. Может на однопроцовом сервере этот параметр игнорируется?
Someone312002, я не совсем понял о том что ты написал, можно тебя попросить отозваться на асю 199089548 или 262612210 или на мыло zsv@hte.vl.net.ua.
Автор: zenant
Дата сообщения: 28.12.2003 21:22
zsv
Про автоматически стартуемые процедуры, если нет SQLAgent.
mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\adminsql.chm::/ad_config_8aem.htm
Автор: Megard
Дата сообщения: 11.01.2004 15:47
Подскажите плз, как составить запрос, чтобы вывести записи, к примеру, с десятой по двадцатую. id записей использовать нельзя, так как нумерация не сквозная.
Автор: zenant
Дата сообщения: 12.01.2004 20:43
declare @Page int
declare @PageSize int
set @Page = 500
set @PageSize = 10


begin
declare @RowsCount int
declare @FirstSelectingRowNumber int
declare @FirstSelectingRowId int

select @RowsCount = count(Id) from table1
set @FirstSelectingRowNumber = (@Page - 1) * @PageSize + 1

if (@FirstSelectingRowNumber <= @RowsCount)
begin
SET ROWCOUNT @FirstSelectingRowNumber
SELECT @FirstSelectingRowId = id
FROM table1
ORDER BY 1


SET ROWCOUNT @PageSize
SELECT * FROM table1
WHERE id >= @FirstSelectingRowId
ORDER BY 1
end
end
Автор: Delphist
Дата сообщения: 13.01.2004 11:18
Значит проблема такая.
Есть заново поставленный сервак и бэкпап от базы.
Я делаю ресторе с него все ок.
В это время вместе с данными восстанавливается юзер владелец таблиц.
Вся проблема в том что я не могу ему дать логин к базе...
Т.е. захожу в Security в Entrprise и делаю новый логин, когда жму ок -
ошибка выходит - такой юзер уже существует.
Как такое лечить что сделать?

Страницы: 1234567891011121314151617181920212223242526272829

Предыдущая тема: Генератор 10-ти разрядных ключей


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.