![]() |
Показаны 58 сообщений на этой странице |
Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- MySQL (http://netadmin.ws/forum/forumdisplay.php?forumid=40)
-- Вопросы по MS SQL Server (http://netadmin.ws/forum/showthread.php?threadid=10996)
Вопросы по MS SQL Server
Покорнейше прошу простить, больше запостить некуда...
Столкнулся по великой нужде с этой какашечкой... Умная капец до невозможности!
(Боже как же мне нравится MYSQL!!)
Итак, вопрос первый: делаю банальный select (мало того что в этой тупости нет простого формата DATE...) так эта сволочь выдает результат в виде 17 дек 1985 0:00... Ð_Ð_Ð_Ð_... Вот кто просит этот дек писать?..
Соответственно вопрос: КАК мне получить дату в НОÐ_МАЛЬНОМ формате 1985-12-17???
he][es добавил 01-09-2005 в 12:59:35:
Есть такой запрос:
INSERT INTO user_log (user_id, rec_date, rec_type, table_name, rec_id) VALUES ('1', NOW(), '2', 'contr_agenti','5')INSERT INTO user_log (user_id, rec_date, rec_type, table_name, rec_id) VALUES ('1', { fn NOW() }, '2', 'contr_agenti', '3')__________________
Админ - вождь Апачей...
Господа! Неужели никто "этим" не пользуется?..
__________________
Админ - вождь Апачей...
quote:
мало того что в этой тупости нет простого формата DATE.

quote:
Вот кто просит этот дек писать?..
__________________
Тест - проверка верности!
quote:
Что ты понимаешь под тупостью мускул или сиквел?

quote:
В MS SQL Server есть 2 типа данных для даты SMALLDATETIME и DATETIME (на все случаи жизни)
quote:
А то, что тебе пишется вид представления даты пользователю!

__________________
Админ - вождь Апачей...
quote:
Ð_х как бы мне его изменить?.. И "принимает" он дату "коряво"... Я ему даю YYYY-MM-DD а он считает, что это YYYY-DD-MM...
__________________
Тест - проверка верности!
А где её смотреть?..
__________________
Админ - вождь Апачей...
quote:
А где её смотреть?..
.__________________
Тест - проверка верности!
quote:
Локализация сервера задается при установке
quote:
Локализация источника ODBC в Администраторе ODBC в настойках самого источника
__________________
Админ - вождь Апачей...
А ешё, 2 вопроса:
а) о целесообразности хранения .doc файлов в БД и
б) как их туда засунуть?..
в MySQL легко суется так:
$dogovor = array();
$file_name = $_FILES['userfile']['tmp_name'];
$handle = fopen($file_name, "r");
$dogovor['text_dogovora'] = fread($handle, $_FILES['userfile']['size']);
fclose($handle);
$dogovor['add_date'] = date('Y-m-d');
$dogovor['seller'] = $var_list['seller'];
$dogovor['buyer'] = $var_list['buyer'];
$dogovor['predmet_dogovora'] = $var_list['predmet_dogovora'];
$dogovor['total_price'] = $var_list['total_price'];
$dogovor['start_date'] = $var_list['start_date'];
$dogovor['end_date'] = $var_list['end_date'];
$dogovor['activity'] = 1;
if ($config['type_SQL'] == 'mssql') {
$result = $db->query('set dateformat Ymd');
if (DB::isError($result)) {
die ($result->getMessage());
}
}
$result = $db->autoExecute('osnovania', $dogovor, DB_AUTOQUERY_INSERT);

__________________
Админ - вождь Апачей...
quote:
а) о целесообразности хранения .doc файлов в БД и
б) как их туда засунуть?..
__________________
Тест - проверка верности!
Viktor и ещё по поводу типов данных, можно где нить нормально почитать?..
(Блин! Ну засада! Я НИКАК не могу понять, как ему сказать, что мне дату надо вид YYYY-MM-DD!!!
)
__________________
Админ - вождь Апачей...
quote:
мне дату надо вид YYYY-MM-DD!!!
__________________
Тест - проверка верности!
Итак! 1/2 решения найдено:
; Specify how datetime and datetim4 columns are returned
; On => Returns data converted to SQL server settings
; Off => Returns values as YYYY-MM-DD hh:mm:ss
mssql.datetimeconvert = Off
__________________
Админ - вождь Апачей...
Для получения даты и конвертации ее в YYYY-MM-DD используй
CONVERT(char(10), GETDATE(), 20)
__________________
Тест - проверка верности!
Viktor этот запрос не проканает под MySQL (а хочется одинаковые... кроссплатформенные...)
__________________
Админ - вождь Апачей...
Ну это вряд ли...
__________________
Тест - проверка верности!
Ещё один "затык" появился. Транзакции.
Сказали что они работают исключительно в одном "скрипте", те. даже не в одном соединении, а ещё уже... Т.е. Если я хочу соединиться с БД, начать транзакцию, послать несколько запросов, а потом отменить или подтвердить транзакцию, то этого сделать нельзя?.. (Ð_НÐ_)
__________________
Админ - вождь Апачей...
quote:
Сказали что они работают исключительно в одном "скрипте", те. даже не в одном соединении, а ещё уже...
__________________
Тест - проверка верности!
Во блин :/ Я так и делаю. При начале раб-ты скрипта создаю соединение, делаю кое какие выборки, потом говорю:
SET IMPLICIT_TRANSACTIONS ON; BEGIN TRANSACTION add_rashod;
набор запросов на вставку, выборку и т.п.
затем в Ð_НÐ_ говорю если чего то не так, то говори:
ROLLBACK TRANSACTION add_rashod;
Он говорит, а сервак ему огрызается:
nativecode=6401 - Cannot roll back add_rashod. No transaction or savepoint of that name was found.
Воот... И я чё то в непонятках.... Как быть?.. Куда копать?..
__________________
Админ - вождь Апачей...
quote:
При начале раб-ты скрипта создаю соединение
quote:
Cannot roll back add_rashod. No transaction or savepoint of that name was found
__________________
Тест - проверка верности!
quote:
И естественно при завершении скрипта соединение закрывается.
if ($config['type_SQL'] == 'mssql') {
$result = $db->query('set dateformat Ymd');
if (DB::isError($result)) {
die ($result->getMessage());
}
$result = $db->query('SET IMPLICIT_TRANSACTIONS ON; BEGIN TRANSACTION add_rashod;'); //SET AUTOCOMMIT=0;
if (DB::isError($result)) { print 'trans beg err';
die ($result->getMessage());
} else {
print 'trans beg ok ';
}
} elseif ($config['type_SQL'] == 'mysql') {
$result = $db->query('SET AUTOCOMMIT=0; START TRANSACTION;');
if (DB::isError($result)) {
die ($result->getMessage());
}
}
// Здесь у меня куча всяких запросов выборок вставок...
if($count_ok == count($result_array['rashodi']) && $kol_vo == 1) {
$result = $db->query('COMMIT TRANSACTION add_rashod;');
if (DB::isError($result)) { print 'commit';
die ($result->getMessage());
} else {
$parser->site_body .= '<h1>Commit</h1>';
}
} else {
$result = $db->query('ROLLBACK TRANSACTION add_rashod;');
if (DB::isError($result)) { print 'rollback<pre>'; print_r($result);
die ($result->getMessage());
} else {
$parser->site_body .= '<h1>ROLLBACK</h1>';
}
}
__________________
Админ - вождь Апачей...
Я понял из твоих предыдущих сообщений, что тебе нужна транзакция в пределах сессии с вызовом различных ПХП скриптов (юзер работает с несколькими веб-страницами).
К последнему посту. Попробуй транзакцию без имени.
quote:
(кстати можно как нить посм. "номер" соединения текущего или что то на подобе SIDа, что бы при старте транзакции сравнить его с тем, что при конце?)
__________________
Тест - проверка верности!
Вообшем наз0ся ЧАЩЕ ОБНОВЛЯЙТЕ МАНЫ!.. Проблему решил слив новый ман по PEAR:: DB...
Теперь такой вопрос, нужно сделать "temporary table" к примеру на час... Такое реально? Или только в пределах соединения?..
__________________
Админ - вождь Апачей...
quote:
Такое реально? Или только в пределах соединения?..
__________________
Тест - проверка верности!
Возникла проблема с типами: необходимо числовое поле в 20 цифр, biging 19 (кажется) да ещё и не полных. Что делать? Юзать text?
__________________
Админ - вождь Апачей...
Если тебе нужны 20 цифр, да еще и с начальными нулями, то однозначно CHAR(20).
__________________
Тест - проверка верности!
Viktor дык это же не числовой формат... :/
Др. варианта нет?
__________________
Админ - вождь Апачей...
Меня смутило твое
quote:
да ещё и не полных.
__________________
Тест - проверка верности!
а вообще для лучшей совместимости всегда хранят дату в unixtimestampe. Никогда не любил пользоваться бд функциями по работу с датами.
__________________
Всегда есть решение.
Viktor пасиба. Понял.
polo учту на будущее...
__________________
Админ - вождь Апачей...
Новый вопрос: хачу "LIMIT 12" (ну или LIMIT 1,12) в MS!!!! Или я нифига в этой доке не пойму, или у него нету LIMIT... 
__________________
Админ - вождь Апачей...
Если можно, то подробней про
quote:
хачу "LIMIT 12"
__________________
Тест - проверка верности!
Ну в MySQL пишешь
SELECT * FROM table LIMIT 1, 12;
и он выберает только первые 12 строк запроса...
__________________
Админ - вождь Апачей...
В SQL Server
SELECT TOP 12 * FROM table
__________________
Тест - проверка верности!
Viktor из за моей фанатичной упертости в кроссплатформенность данный запрос не проканывает
... MySQL его не переварит.
__________________
Админ - вождь Апачей...
Других вариантов нет...
__________________
Тест - проверка верности!
:/ жаль... Ладно, прорвемся... 
Ещё один вопрос: есть запрос:
SELECT limits.id, limits.structura_kks_id, limits.structura_rashodov_id, limits.to_year, limits.to_year_total, structura_kks.title AS structura_kks_title,
structura_rashodov.title AS structura_rashodov_title,
(SELECT SUM(total_price_nds)
FROM rashodi INNER JOIN
structura_kks structura_kks_inner ON rashodi.structura_kks_id = structura_kks_inner.id
WHERE structura_kks_inner.cleft >= structura_kks.cleft AND structura_kks_inner.cright <= structura_kks.cright) AS rashodi_total
FROM limits INNER JOIN
structura_kks ON limits.structura_kks_id = structura_kks.id INNER JOIN
structura_rashodov ON limits.structura_rashodov_id = structura_rashodov.id
WHERE (limits.to_year_total >=
(SELECT SUM(total_price_nds)
FROM rashodi INNER JOIN
structura_kks structura_kks_inner ON rashodi.structura_kks_id = structura_kks_inner.id
WHERE structura_kks_inner.cleft >= structura_kks.cleft AND structura_kks_inner.cright <= structura_kks.cright))
ORDER BY structura_kks.cleft, structura_rashodov.cleft
SELECT limits.id, limits.structura_kks_id, limits.structura_rashodov_id, limits.to_year, limits.to_year_total, structura_kks.title AS structura_kks_title,
structura_rashodov.title AS structura_rashodov_title,
(SELECT SUM(total_price_nds)
FROM rashodi INNER JOIN
structura_kks structura_kks_inner ON rashodi.structura_kks_id = structura_kks_inner.id
WHERE structura_kks_inner.cleft >= structura_kks.cleft AND structura_kks_inner.cright <= structura_kks.cright) AS rashodi_total
FROM limits INNER JOIN
structura_kks ON limits.structura_kks_id = structura_kks.id INNER JOIN
structura_rashodov ON limits.structura_rashodov_id = structura_rashodov.id
WHERE (limits.to_year_total >= rashodi_total)
ORDER BY structura_kks.cleft, structura_rashodov.cleft
__________________
Админ - вождь Апачей...
Вполне логично, т.к. нельзя использовать в условиях имена вычисляемых столбцов.
А что мешает сделать вид, который делает необходимые вычисления?
Вид MyView
SELECT SUM(total_price_nds) AS rashodi_total
FROM rashodi INNER JOIN
structura_kks structura_kks_inner ON rashodi.structura_kks_id = structura_kks_inner.id
WHERE structura_kks_inner.cleft >= structura_kks.cleft AND structura_kks_inner.cright <= structura_kks.cright
)
SELECT limits.id, limits.structura_kks_id, limits.structura_rashodov_id, limits.to_year, limits.to_year_total, structura_kks.title AS structura_kks_title,
structura_rashodov.title AS structura_rashodov_title,
MyView.rashodi_total
FROM MyView, limits INNER JOIN
structura_kks ON limits.structura_kks_id = structura_kks.id INNER JOIN
structura_rashodov ON limits.structura_rashodov_id = structura_rashodov.id
WHERE (limits.to_year_total >= MyView.rashodi_total)
ORDER BY structura_kks.cleft, structura_rashodov.cleft
__________________
Тест - проверка верности!
Viktor "вид"="представление"? (я такой термин слышал).
А он возьмёт значения для WHERE "извне"?..
И опять встает вопрос о моей фанатичной упертости в кроссплатформенность... Будет ли это под MySQL 5.x работать?..
__________________
Админ - вождь Апачей...
quote:
SELECT TOP 12 * FROM table
__________________
Всегда есть решение.
polo пасиба за идею... Видимо придтся так и сделать...
Вот ещё одна фишка:
SELECT structura_kks.id, structura_kks.title, structura_kks. LEVEL, structura_kks.cleft, structura_kks.cright, structura_kks.fio,
contr_zadania.id AS contr_zadania_id, contr_zadania.kz_to_year AS year_of_kz, contr_zadania.kz_year AS to_year,
contr_zadania.kz_I_kvartal AS kv_1, contr_zadania.kz_II_kvartal AS kv_2, contr_zadania.kz_III_kvartal AS kv_3,
contr_zadania.kz_IV_kvartal AS kv_4
FROM structura_kks LEFT OUTER JOIN
contr_zadania ON contr_zadania.structura_kks_id = structura_kks.id
ORDER BY structura_kks.cleft
SELECT structura_kks.id, structura_kks.title, structura_kks. LEVEL, structura_kks.cleft, structura_kks.cright, structura_kks.fio,
contr_zadania.id AS contr_zadania_id, contr_zadania.kz_to_year AS year_of_kz, contr_zadania.kz_year AS to_year,
contr_zadania.kz_I_kvartal AS kv_1, contr_zadania.kz_II_kvartal AS kv_2, contr_zadania.kz_III_kvartal AS kv_3,
contr_zadania.kz_IV_kvartal AS kv_4
FROM structura_kks LEFT OUTER JOIN
contr_zadania ON contr_zadania.structura_kks_id = structura_kks.id
WHERE contr_zadania.kz_to_year = '2006'
ORDER BY structura_kks.cleft
__________________
Админ - вождь Апачей...
he][es, если не секрет, зачем ты делаешь поддержку двум базам одновременно?
__________________
Всегда есть решение.
polo
эээ... ну.. "типа круто"
... Просто когда есть возможность перенести приложение на др. БД это же хорошо.. Или я не прав?
__________________
Админ - вождь Апачей...
Ну смотря какое приложение и на что оно направлено. Если это какой-то коммерческий прект расчитанный на узкий круг клиентов, то таке врядли нужно. Если это крупномасштабный скрипт который будет продаваться или раздаваться публично, то наверное нужно. Я например думаю так: если пишишь скрипт, максимально его подготовь для перехода на другую бд, а при надобности позже переноситься на другую бд. Хочу заметить что это лично мое мнение.
__________________
Всегда есть решение.
quote:
Если это какой-то коммерческий прект расчитанный на узкий круг клиентов, то таке врядли нужно.
я болен манией кросплатформенности...__________________
Админ - вождь Апачей...
quote:
"вид"="представление"?
quote:
А не лучше ли сделать функцию для выборки таких результатов
и
А он возьмёт значения для WHERE "извне"?..
)quote:
он выбирает не все записи из таблицы structura_kks, а только те, к которым есть привязка из contr_zadania
WHERE contr_zadania.kz_to_year = '2006'
OR contr_zadania.kz_to_year IS NULL
__________________
Тест - проверка верности!
Viktor не... нифига не работает!..
Может плохо объяснил:
Таблица structura_kks это список подразделений
Таблица contr_zadania содержит задания для стр. подразделений привязанные по id. НО не для всех подразделений установлены задания, а так же для одного стр. подразделения могут быть установлены задания на несколько лет! Надо выбрать все стр. подразделения и задания на один год...
__________________
Админ - вождь Апачей...
У меня работало...
Как вариант, кинь нужные таблицы потестить.
__________________
Тест - проверка верности!
В приложении 2 табл.
Про требуемую выборку я написал чуть выше...
Заранее благодарен за помощь!!!
he][es добавил 25-01-2006 в 12:46:50:
Ваабще ничего не могу понять, выбирается, и вроде бы даже то что надо, НО почему то из табл. structura_kks выводятся не все строки!
Не выводятся те строки для которых указаны контр.задания (табл. contr_zadania) на прошлый (к примеру) год. Т.е. те где не contr_zadania.kz_to_year = '2006'
__________________
Админ - вождь Апачей...
Все чудненько работает 
SELECT structura_kks.id, structura_kks.title, structura_kks. LEVEL, structura_kks.cleft, structura_kks.cright, structura_kks.fio,
contr_zadania.id AS contr_zadania_id, contr_zadania.kz_to_year AS year_of_kz, contr_zadania.kz_year AS to_year,
contr_zadania.kz_I_kvartal AS kv_1, contr_zadania.kz_II_kvartal AS kv_2, contr_zadania.kz_III_kvartal AS kv_3,
contr_zadania.kz_IV_kvartal AS kv_4
FROM structura_kks LEFT OUTER JOIN
contr_zadania ON contr_zadania.structura_kks_id = structura_kks.id
WHERE contr_zadania.kz_year = '2006' OR contr_zadania.kz_year IS NULL
ORDER BY structura_kks.cleftWHERE (contr_zadania.kz_year = '2006') OR (contr_zadania.kz_year IS NULL)
__________________
Тест - проверка верности!
Viktor я прошу прощения за некую дезинформацию, но у меня тут поля просто попереименовались... Т.что я всё правильно писал...
При таком запросе выводятся не все записи из таблицы structura_kks, НЕ выводятся те для которых установлены задания (табл. contr_zadania) не удовлетвор. условию... Т.е. в данном случае строки 1 и 2. (там в таблицах для них есть задания на 2005 год)...
__________________
Админ - вождь Апачей...
quote:
НЕ выводятся те для которых установлены задания (табл. contr_zadania) не удовлетвор. условию...
__________________
Тест - проверка верности!
Viktor вы меня не правильно поняли...
К примеру для записи №4 в таблице structura_kks установлено задание (табл. contr_zadania) на 2005 год, и при запросе с условием = 2006, строка №4 из structura_kks ВООБЩЕ не выведется...
А мне нужно что бы если для 4ой строки небыло подходящего задания (=2006) то выводилась инф-ия из structura_kks.
Те.
structura_kks
1 - запись1
2 - запись2
3 - запись3
4 - запись4
contr_zadania
1 - 2 - 2006 - 20000
2 - 3 - 2006 - 34445
3 - 1 - 2005 - 56784
При таком раскладе после запроса мы получим
запись2 - 20000
запись3 - 34445
запись4 - null
А первой записи НЕТ... Теперь понятно?
__________________
Админ - вождь Апачей...
Если я правильно понял, то значения из contr_zadania должны быть только для 2006 года, а для остальных записей из structura_kks Null?
Если так, то вот вариант
SELECT structura_kks.id, structura_kks.title, structura_kks. LEVEL, structura_kks.cleft, structura_kks.cright, structura_kks.fio,
c.id AS contr_zadania_id, c.kz_to_year AS year_of_kz, c.kz_year AS to_year,
c.kz_I_kvartal AS kv_1, c.kz_II_kvartal AS kv_2, c.kz_III_kvartal AS kv_3,
c.kz_IV_kvartal AS kv_4
FROM structura_kks LEFT OUTER JOIN (select * from contr_zadania where kz_year = '2006') c
ON c.structura_kks_id = structura_kks.id
ORDER BY structura_kks.cleft
__________________
Тест - проверка верности!
И снова здравствуйте 
Такой казалось бы простой запрос, а не работает...
Таблица1:
id, type, price
Таблица2:
id, title
надо первую сгруппировать по type посчитать SUM(price) и проименовать эти группы из Табл.2... (как вы догадались id Т.2 это те самые type из Т.1)
Делаю:
SELECT structura_dohodov.id, SUM(dohodi.total_price_nds) AS dohodi_total FROM dohodi INNER JOIN structura_dohodov ON (dohodi.structura_dohodov_id = structura_dohodov.id) WHERE (dohodi.structura_kks_id = 4) AND (YEAR(dohodi.data_dohoda) = '2006') GROUP BY structura_dohodov.id
И всё казалось бы хорошо и счастье близко, но если я вставлю structura_dohodov.title он грязно выругается на то что его нет в гроуп, а туда его ставить нельзя т.к. оно типа text...
Вот такой затык. Что делать?
he][es добавил 30-03-2006 в 11:14:02:
З.Ы. GROUP BY dohodi.structura_dohodov_id тоже не проканывает...
__________________
Админ - вождь Апачей...
quote:
а туда его ставить нельзя т.к. оно типа text...

quote:
GROUP BY dohodi.structura_dohodov_id тоже не проканывает...

__________________
Тест - проверка верности!
Иначе никак?... :/ ладно... поменяю тип =)
(я всё парюсь с типами данных... Нигде чётко не могу найти описаний..)
__________________
Админ - вождь Апачей...
quote:
Нигде чётко не могу найти описаний
__________________
Тест - проверка верности!
| Формат времени GMT. Текущее время 22:59. | Показаны 58 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.