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

» Microsoft SQL Server

Автор: someone312002
Дата сообщения: 13.01.2004 11:41
BOL и процедура sp_change_users_login тебе помогут в этом!!!
Автор: Delphist
Дата сообщения: 13.01.2004 12:11
ЁЁЁ запахало!
Бооольшое спасибо...
!!!!
Автор: Megard
Дата сообщения: 13.01.2004 19:32

Цитата:
Подскажите плз, как составить запрос, чтобы вывести записи, к примеру, с десятой по двадцатую. id записей использовать нельзя, так как нумерация не сквозная.

Дополнение: не используя хранимых процедур. Нужен просто SQL-запрос.
Автор: zenant
Дата сообщения: 13.01.2004 20:16
Megard
Ну если очень надо, то например вот так:
select top n *
from (select top m *
from table1 order by id asc) as t order by id desc

n - кол-во записей на страницу
m - n*номер требуемой страницы. (Если n=5, то для 10-ой страницы m=50)
поле id - ключ, не обязательно правильно упорядоченный

данный запрос имеет 2 недостатка:
1. Текст запроса всегда надо формировать динамически.
2. Немного подтормаживает для больших таблиц и последних номеров страниц
Автор: someone312002
Дата сообщения: 14.01.2004 08:27
Megard, zenant, Объясните мне - тупоголовому: в каких случаях может понадобится подобный запрос ? Перебирал варианты - ничего на ум не пришло...

2Модераторс - сори за оффтоп...
Автор: zenant
Дата сообщения: 14.01.2004 08:33
Он нужен в любом веб-приложении для постраничного ввывода результатов запроса.
Автор: someone312002
Дата сообщения: 14.01.2004 08:37
Тогда объясни, почему ТОЛЬКО запрос... Хотя, это обсуждение можно перевести и на другие рельсы - мою асю ты видишь - заходи...
Автор: zenant
Дата сообщения: 14.01.2004 10:55
Это не ко мне.. Человек хотел запрос - пожалуйста запрос, хотел эфффективную процедуру - пожалуйста процедуру.
Автор: Megard
Дата сообщения: 15.01.2004 16:21

Цитата:
Megard, zenant, Объясните мне - тупоголовому: в каких случаях может понадобится подобный запрос ? Перебирал варианты - ничего на ум не пришло...


Объясняю:
Запрос делается из php. Результат сохранняется в виде массива. Короче говоря, из-за того, что таблица очень большая, получается очень большой массив.

Добавлено
2 zenant:
Спасибо, сам я не сообразил.
Автор: zsv
Дата сообщения: 15.01.2004 19:04
Разьясните пожалуйста, в чем тут фишка.
Запрос в аналайзере типа
insert into ...
select ... from (select ... from ... inner join ... where ... ) e
union
select ... from (select ... from ... inner join ... where ... ) e
where ...
(подробности пропустил дабы место сэкономить) выполняется 1.2 мин.
Переношу его ничего не меняя в тело сохр процедуры (там уже есть довольно много запросов, этот становиться последним) и конца процедуры я не дожидаюсь...
Входные данные для этого запроса эдентичные в обоих вариантах выполнения.
Может дело в каких-то блокировках или в каких-то открытых транзакциях, я просто ума не приложу в каком направлении копать.
Автор: zenant
Дата сообщения: 16.01.2004 09:26
zsv
1. Никогда не флуди и не поднимай темы н этом форуме
2. Проблема с твоей процедурой наверняка связана с блокировками. Надо смотреть что и как блокируется в предыдущих запросах, если ли транзакции, какие у них уровни изоляции. Смотреть можно в Enterprise Manager в окошке Management -> Current Activity.
3. Надеюсь ты не вставляешь в таблицу записи выбранные из нее самой?
Автор: zsv
Дата сообщения: 16.01.2004 09:40
Я бы вообще на форум не обращался, тем более что мне это никак не удобно, просто выхода у меня нет, спросить про проблему не у кого.
Мне конечно слабо помог твой ответ, zenant. Наверное мне надо это разжевать попонятнее. С транзакциями и блокировками я практически не знаком.
Огромная просьба к zenant или др. гуру скл. Найдите меня в асе 262612210 или на мыло, чтобы поподробнее пообщаться.

и еще. я не совсем понял насчет не флудить и поднимать тему
Автор: Megard
Дата сообщения: 20.02.2004 17:48

Цитата:
Подскажите плз, как составить запрос, чтобы вывести записи, к примеру, с десятой по двадцатую. id записей использовать нельзя, так как нумерация не сквозная. Не используя хранимых процедур. Нужен просто SQL-запрос.



Цитата:
select top n *
from (select top m *
from table1 order by id asc) as t order by id desc

n - кол-во записей на страницу
m - n*номер требуемой страницы. (Если n=5, то для 10-ой страницы m=50)
поле id - ключ, не обязательно правильно упорядоченный


Еще усложню задачу: Как сделать тоже самое, если таблиц несколько?
Автор: Bloody_Nokia_Adept
Дата сообщения: 21.02.2004 19:39
Megard

Цитата:
Еще усложню задачу: Как сделать тоже самое, если таблиц несколько?

Эстет...

Если серьезно, то нормально делается только на хранимых процедурах, т.к. шаманство с top не очень производительно. Предлагаю копнуть форум по MS SQL небезизвестного sql.ru на предмет этих выборок - там раньше целый FAQ заводили и дискуссию на 10 экранов разводили.
Автор: Megard
Дата сообщения: 23.02.2004 18:07
Эх! Не могу я хранимые процедуры из PHP использовать!
Автор: Bloody_Nokia_Adept
Дата сообщения: 23.02.2004 18:22
Megard

Цитата:
Эх! Не могу я хранимые процедуры из PHP использовать!

И расскажи мне о принципиальной разнице между вызовом

Цитата:
select * from tab where col = ?

и

Цитата:
exec some_proc(?)
,
которая внутри себя делает этот вызов?
ИМХО, это заблуждение о невозможности использования хранимого кода в вызовах PHP - ему все равно, т.к. реально разбор делается на более низких уровнях. Я бы запрятал все в одну хранимую процедуру, которая возвращала бы требуемое результирующее множество.
Автор: Borduk
Дата сообщения: 25.03.2004 20:28
Объясните, пожалуйста, почему в запросе на обновление:

update #t set #t.cl = #t.cl + 1
from #t, t1
where #t.[id] = t1.[id]

участвуют не все записи из таблицы t1, а только одна из них (первая?)
(значения [id] в t1 могут содержать /*как правило - содержат*/ одинаковые значения?

Ведь условие объединения from #t, t1 where #t.[id] = t1.[id] является условием объединения "многие-ко-многим" - или я ошибаюсь ?
Автор: someone312002
Дата сообщения: 26.03.2004 16:29

Цитата:
Эх! Не могу я хранимые процедуры из PHP использовать!

Ну, что я могу тебе сказать про Магадан ...
Есть один выход, правда многие просто не согласяться...
Если данные "не критичны", то бишь есть такой временной промежуток, в котором ГЛАВНАЯ таблица может попасть "под раздачу", то делай следущее...
Условие: есть несколько таблиц, данные мз которых выводяться ПОСТРАНИЧНО на веб-страницу, Есть также "главная" таблица, по которой связываются данные с другими (классифицирующими ? ) таблицами, есть условие, по которому ОБЯЗАТЕЛЬНО должны быть отсортированы данные.
Что ты можешь сделать: ночью (к примеру) создаёшь временную таблицу селектом и отсортированную по данному условию-полю. Удаляешь и вновь создаёшь свою главную таблицу и заносишь в них уже остортированные данные, НО... не просто заносишь, а с ПОРЯДКОВЫМ НОМЕРОМ ЗАПИСИ... дальше, создаёшь вьюшку, по которой выгребаешь данные из нескольких таблиц, далее уже из вьюшки делаешь селект, где проставляешь условие <vCounter> between CountFirst and CountSecond . Данная функция действительна как для оракл, так и для мс скл серверов.

Гуру, опять же таки, если я не прав - киньте в меня чем-нить тяжёлым и корявым...
Автор: griin
Дата сообщения: 02.04.2004 13:57
Есть хранимая процедура:

Код:
CREATE PROCEDURE procSelectLastOperationNumber
@Date smalldatetime
AS
DECLARE @Count int
SELECT @Count = COUNT(*) FROM Operations WHERE Date = @Date
RETURN @Count
GO
Автор: someone312002
Дата сообщения: 02.04.2004 14:25
для параметров хранимой процедуры можно проставить OUTPUT, и вызывать её также надо будет с этим параметром, к примеру:
procedure sp1 (param1 varchar(10), param2 varchar(10) OUTPUT)
as begin...

дык вызывать её небоходимо будет так:
создаёшь переменные, для того, чтобы их передать процедуре (декларируешь)
потом, к примеру вызов из скл:
exec sp1(@var1, @var2 OUTPUT)
дальше делай что хочешь с @var2, поскольку твоя процедура возвратит в переменную необходимое значение коунт (если ты в теле процедуры сделаешь присвоение...)
Вот и всё...

Чтобы не быть голословным - пример из БОЛ:

Код: USE Northwind
GO
DROP PROCEDURE OrderSummary
GO
CREATE PROCEDURE OrderSummary @MaxQuantity INT OUTPUT AS
-- SELECT to return a result set summarizing
-- employee sales.
SELECT Ord.EmployeeID, SummSales = SUM(OrDet.UnitPrice * OrDet.Quantity)
FROM Orders AS Ord
JOIN [Order Details] AS OrDet ON (Ord.OrderID = OrDet.OrderID)
GROUP BY Ord.EmployeeID
ORDER BY Ord.EmployeeID

-- SELECT to fill the output parameter with the
-- maximum quantity from Order Details.
SELECT @MaxQuantity = MAX(Quantity) FROM [Order Details]

-- Return the number of all items ordered.
RETURN (SELECT SUM(Quantity) FROM [Order Details])
GO

-- Test the stored procedure.

-- DECLARE variables to hold the return code
-- and output parameter.
DECLARE @OrderSum INT
DECLARE @LargestOrder INT

-- Execute the procedure, which returns
-- the result set from the first SELECT.
EXEC @OrderSum = OrderSummary @MaxQuantity = @LargestOrder OUTPUT

-- Use the return code and output parameter.
PRINT 'The size of the largest single order was: ' +
CONVERT(CHAR(6), @LargestOrder)
PRINT 'The sum of the quantities ordered was: ' +
CONVERT(CHAR(6), @OrderSum)
GO

Автор: Megard
Дата сообщения: 22.06.2004 09:34
Подскажите, плз, есть ли способ импортировать таблицу из MS SQL в MySql?
Автор: naPmu3aH
Дата сообщения: 22.06.2004 10:08
Megard
Описание или данные?

В первом случае - где-то в меню EM есть пункт "Generate scripts", потом возможно потребуется доводка руками под MySQL
Во втором - экспорт/импорт через текстовый файл или через ODBC, если есть нормальный ODBC драйвер для MySQL
Автор: Megard
Дата сообщения: 23.06.2004 09:51
Т.е программы, в которой есть просто кнопка "конвертровать из MS SQL в MySql?" нету?
Мне тут где-то попадалась програмка, которая позволяет это проделывать с Аксесом. Я думал может и для MS Sql такая есть.
Автор: Borduk
Дата сообщения: 14.07.2004 20:20
griin
Recordset.MoveFirst
Recordset.Fileds[0].Value вернет необходимое значение
Автор: Bill_PHO
Дата сообщения: 02.12.2004 09:24
Не качал ли кто патчи для MS SQL Server, которые вышли после 3 пака?

Майкрософт не дает закачать их просто так.

А после установки XP SP2 перстал нормально работать отладчик.
Автор: zsv
Дата сообщения: 11.01.2005 17:50
Подскажите, как в поле типа Image или Text (SQL Server 2000) закачать файл лежащий на сервере.
Скрипт должен быть написан в сохраненной процедуре, а я только вызывать процедуру с клиента.
Автор: mvgfirst
Дата сообщения: 18.01.2005 06:21
В сети две машины всего (сеть - патчкорд кроссоверный). Один - ноутбук (WinXP Corp Ed. SP1), второй - полноценный комп (WINXP CorpEd SP2). На ноутбук установлен MSDE2000 SP3. На ноутбуке EM, QA и прочий софт (в том числе 1С) подключаются к серверу и работают... без проблем.
При попытке произвести подключение со второго компьютера (любым софтом) выдает сообщение "SQL server does not exists or access denid" (извините если не так написал - пишу по памяти) Вообщем смысл понятен.
Сеть - рабочая группа.

Из того что попробовал сделать...
1. Отключил все фаерволы... дабы не мешали в том числе и встроенные.
2. Прописал пользователя второго компьютера в качестве администратора на первом.
3. Установил режим аутентификации на SQL сервере совместную "Windows & SQL" и попробовал зайти под логином "sa".

Вышеперечисленные действия эффекта не возымели....
Помогите... уладить вопрос... или укажите на причину возникновения этих сложностей.

1. Может ли быть причиной тому - SP2 для WinXP
2. Каким образом можно диагностировать причину отказа в доступе к SQL серверу. Т.е. другими словами какие утилиты можно применить что бы получить боле развернутую информацию???

P.S. В журнале событий системы на обеих компьютерах - ни слова о проблемах с SQL сервером.

P.P.S. Пробовал на второй компьютер ставить MSDE та же картина, только в зеркальном отображении с ноутбука невозможно присоединится к серверу на втором компьютере.
Еще замечу что доступ к дискам, файлам и прочим "шарам" по сети проходит нормально... нет возможности только подключится к серверу.
Автор: ShurilloM
Дата сообщения: 18.01.2005 08:16
Народ, подскажите плиз как посмотреть/отредактировать/удалить задания на backup базы сделанные мной. У меня MS SQL 7.0, задания назначались из Enterprise Manager (правый клик по базе - все задачи - backup database.)

И еще вопрос: При установке MS SQL 7.0 который идет в комплекте с 1С задаются вопросы про порядок сортировки и кодовую страницу (дословно не помню). Я ставил с другой компашки и таких вопросов он не задавал. Это грозит чем-нибудь неприятным для моей базы? Сейчас можно как-то исправить это дело без переустановки?
Автор: aadym
Дата сообщения: 18.01.2005 08:48
ShurilloM

Цитата:
Народ, подскажите плиз как посмотреть/отредактировать/удалить задания на backup базы сделанные мной. У меня MS SQL 7.0, задания назначались из Enterprise Manager (правый клик по базе - все задачи - backup database.)


Management - SQL Server Agent - Jobs


Цитата:
И еще вопрос: При установке MS SQL 7.0 который идет в комплекте с 1С задаются вопросы про порядок сортировки и кодовую страницу (дословно не помню). Я ставил с другой компашки и таких вопросов он не задавал. Это грозит чем-нибудь неприятным для моей базы? Сейчас можно как-то исправить это дело без переустановки?


Возможно некорректное отображение кириллицы.
Автор: ShurilloM
Дата сообщения: 18.01.2005 09:04
aadym

Спасибо!

А с кириллицей как быть? Сейчас стоит база 1С и вроде бы все в порядке но душа неспокойна

Страницы: 1234567891011121314151617181920212223242526272829

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


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