YUKON в примерах

Начинаю знакомить с YUKON, знакомство с вещами которые понравились

Переменные типа varchar(max). Теперь при работе со строками-переменными ограничения нет
Правда varchar(max) не может быть индексирован а в базе он зранится как TEXT.
Просто многие ограничения при работе с ним сняты

snapshot isolation level - даже лучше чем в Oracle.
То есть читатели не блокируются

Recursive queries, например, можно расрыть все дерево папок одним оператором
(но для Docs у меня пока не получилось)

Использование namespaces

create schema PIKA
create schema CHOU
GO
 
create procedure PIKA.BBB as select 111
create procedure CHOU.BBB as select 222
create procedure BBB as select 333
GO
 
exec CHOU.BBB
exec PIKA.BBB
exec BBB

Блок TRY..CATCH

create table uni (n int primary key)
go
create procedure InsUni @k int
as
  begin try
    insert into uni select @k
    print 'Inserted !!!'
  end try
  begin catch 
    print 'Failed !!!'
  end catch
go
exec InsUni 7
--Inserted !!!
exec InsUni 7
--Failed !!!

Snapshot есть база замороженная во времени
Идеальное средство для бух отчетов
Создаются почти мгновенно

CREATE DATABASE WO1 ON ( NAME = 'MyDb_Data', FILENAME = 'C:DATAWO1.SS') AS SNAPSHOT OF MyDB
GO
select * from WO1..Docs
GO

DDL triggers, можно отслеживать например создания таблиц (для metadata ?)

CREATE TRIGGER safety 
ON DATABASE 
FOR CREATE_TABLE 
AS 
   PRINT 'CREATE TABLE Issued.'
   PRINT CONVERT (nvarchar (1000), EVENTDATA() )
GO

PIVOT таблицы
Хотя на самом деле это просто макрос для многочисленных case

select SPACESTRING,[10],[20],[30],[40],[50] from TABLE_CDC as x 
  PIVOT(count(x.IDCDC) for x.IDSTATUS in ([10],[20],[30],[40],[50])) as X

Хранение XML в 'родном' формате
Вот пример с реальным XML и реальной таблицей

SELECT XMLSIGNATURE,SIGNEDDOCUMENT into SIG_1 FROM SIGNATURE 
SELECT convert(XML,XMLSIGNATURE) as XMLSIGNATURE,convert(XML,SIGNEDDOCUMENT) as SIGNEDDOCUMENT 
  into SIG_2 FROM SIGNATURE 

Сравнение размеров:
SIG_1 = 16.7Mb
SIG_2 = 6.547 Mb

Само хранение нереляционных данных не революционно
Революция в том что можно в них быстро искать
Вот простой способ

-- Увы так не получится. Надо использовать функцию
alter table SIGNATURE add LegalName as convert(XML,XMLSIGNATURE).query('data(//LegalName)')
GO
 
-- Создаем функцию
create function LegalName (@t TEXT) 
  returns varchar(128) -- не varchar(max) 
  with schemabinding  -- !!!
as 
  begin 
  return convert(varchar(max),convert(XML,@t).query('data(//LegalName)')) 
  end
GO
 
-- создаем колонку
alter table SIGNATURE add LegalName as dbo.LegalName(XMLSIGNATURE)
GO
 
-- и индекс
create index IX_LegalName on SIGNATURE (LegalName)
 
-- проверка что работает
select * from SIGNATURE where LegalName='Test Benoit Signature 2'
GO

Но есть и способ куда гибче

create table SIG_3 (n int identity primary key, doc xml)
-- в таблице дожен быть PK
 
-- заполняю таблицу
insert into SIG_3 (doc) 
  select SIGNEDDOCUMENT from SIG_2 
    where SIGNEDDOCUMENT is not null

Теперь провожу эксперименты с поиском с использованием Xpath/Xquery,
время всегда это время второго выполнения

Без индекса

select count(*) from SIG_3 where 
  doc.exist('//cdcInfo[title="test steph"]')=1
à 2 lignes
CPU time = 1109 ms,  elapsed time = 1105 ms.

Теперь создаем индекс XML

create primary XML index XXX on SIG_3 (doc)
 
select count(*) from SIG_3 where 
  doc.exist('//cdcInfo[title="test steph"]')=1
à 2 lignes
CPU time = 265 ms,  elapsed time = 287 ms.

Лучше. А еще лучше с вспомошательным индексом XML

create XML index ZZZ on SIG_3 (doc) using xml index XXX for path
 
select count(*) from SIG_3 where 
  doc.exist('//cdcInfo[title="test steph"]')=1
à 2 lignes
CPU time = 47 ms,  elapsed time = 29 ms.

Замечания: collation учитывается нормально

select count(*) from SIG_3 where 
  doc.exist('//cdcInfo[title="TEST STEPH"]')=1
à 2 строки

Однако, названия полей всегда case-sensitive

select count(*) from SIG_3 where 
  doc.exist('//cdcInfo[TITLE="TEST STEPH"]')=1
à 0 строк

Надо сказать что параметр exists, valuе НЕ является строкой
Это как бы строка
Она парзится сразу и не может быть переменной
Но переменные туда все таки можно передавать:

declare @val varchar(max)
set @val='test steph'
select count(*) from SIG_3 where   
  doc.exist('//cdcInfo[title=sql:variable("@val")]')=1
à 2 строки

А вот как элегантно можно получить Nную страницу выборки, без временных таблиц.
Не напоминает rownum в Oracle ?

select * from (
  select row_number() over (order by Name desc) RNUM,
    * from Docs
  ) X where X.RNUM>=1000 and X.RNUM<1010
order by Name desc

Есть и более сложные случаи с over (partition by ... order by ...)

Forums: 

Блин, какая анлийская статья ?

Блин, какая анлийская статья ? Я сам писал
ВОт и примеры даже местами из Nexus

Получилось recursive query
Вот кверь которая выдает документы с уровнем иерархии и даже с путем ПапкаПодпапка итд

WITH Rec(Folder, Name, UDN, Lev, Path) AS 
(
    SELECT Folder, Name, UDN, 0 AS Lev, 
        convert(varchar(2000),'') as Path
      FROM Docs WHERE Folder=0
    UNION ALL
    SELECT sub.Folder, sub.Name, sub.UDN, up.Lev+1, 
        convert(varchar(2000),up.Path+'/'+sub.Name)
    FROM Docs sub INNER JOIN Rec up  ON sub.Folder = up.UDN
)
SELECT * FROM Rec
  OPTION (MAXRECURSION 10) -- чтобы если что не зацикливаться
GO

Изображение пользователя ipanshin.

Это хорошо. Еще бы кинул дис

Это хорошо.
Еще бы кинул дистрибутивчик yukon
Мда. Если все так умно, то почему так поздно? :)

Изображение пользователя st.

Блин, какая анлийс

Блин, какая анлийская статья ?

Статья или материалы с описанием юконовских новшеств, по которым ты написал свою статью с примерами из нехуса.
Ведь не телепатическим же способом ты узнал о нововведениях :)

Изображение пользователя ipanshin.

Игорь, он большой

Игорь, он большой Почти целый диск

В смысле для меня? :) Погоди ты о дистрибутиве или BookOnline?
Вопрос. Кто даст дистрибутив Yukon? ну и пр. service pack, resource kit, bookonline, etc...?

Изображение пользователя ipanshin.

Может и бродит. Предлагаешь мн

Может и бродит. Предлагаешь мне побродить тоже? :)

В Питере поздняя осень...
Кто-то листвою шуршит...
Кому-то понравилась просинь...
Кто...(?) за бутылкой бежит...

Beta 1 плоховата, лучше Beta 2

Beta 1 плоховата, лучше Beta 2
Осел в России не рулит... Там нет трасс для интернета, а только бездорожье :)

А вот SB наверняка бы мог досать через artp :)

Изображение пользователя st.

Ессно, если у кого есть подпис

Ессно, если у кого есть подписка на MSDN, то к тому диск с юконом уже приехал. В Нишишанце подписка имеется.

Re: YUKON в примерах

snapshot isolation level - даже лучше чем в Oracle.
То есть читатели не блокируются

И где же это в Oracle читатели блокируются? И не надо ни какого особого isolation level устанавливать все работает при обычном read committed.

Snapshot есть база замороженная во времени
Идеальное средство для бух отчетов
Создаются почти мгновенно

CREATE DATABASE WO1 ON ( NAME = 'MyDb_Data', FILENAME = 'C:DATAWO1.SS') AS SNAPSHOT OF MyDB
GO
select * from WO1..Docs
GO

Идельное средство для создания срезов, например, при закрытии периода. Думаю, что работает быстро за счет того, что просто копирует файлы DB в новое место.
Snapshot имеет статус RO или в него допустимы insert, update, delete?
Можно RO переделать на RW?

1. Когда я писал что лучше то

1. Когда я писал что лучше то имелось ввиду что реализовано лучше а нет то что в Oracle этого нет
2. Read committed в Oracle никогда не блокирует читателей. А вот в SQL 2000 блокировал

По поводу SNAPSHOT
Файлы создаются того же размера но информация не копируется
То есть они остаются почти пустыми
Дальше они отражают только дельту

В принципе базу как то можно потом 'оживить'

2 CTНу и нафк было давать сс

2 CT
Ну и нафк было давать ссылки на осел ? Я таки не удержался и поставил его. Благо noos мне на халяву поднял канал с 128K до 512K. Теперь смотрб на кучу downloads... блин,,,

Изображение пользователя ipanshin.

у кого есть подпис

у кого есть подписка на MSDN

Они еще не получали осеннее обновление. А до этого не было. Мне доложено и вроде верно.

Изображение пользователя ipanshin.

Вот, например, схо

Вот, например, сходу нашел ссылки
Microsoft SQL Server Yukon(SQL 2005).rar
Microsoft Sql 2004 Server Beta1 Yukon J@V@Power 2k4 Virtualdrive Image.iso

Попробуй сам сходить на эти ссылки.

Изображение пользователя ipanshin.

Оказывается люди не только мог

Оказывается люди не только могут спать группой, есть группой, но и тянуть файлы тоже группой :)

emule is for donkey only. thanks.
По этому поводу я часто вспоминаю книгу пиноккио или буратино.

Я на одном дыхании писал стихи.
На вздохе, на полвздохе сбился...
Дыхание прервалось... НАВСЕГДА.

Изображение пользователя st.

Попробуй сам сходи

Попробуй сам сходить на эти ссылки.

Да легко. Источников много, качаться начало быстро.
Убрал за ненадобностью: у меня и так трафик по 1,5-2 гига в день.

Продолжаю знакомить с YUKON

Продолжаю знакомить с YUKON

Создание WEB-сервиса. Он будет получать запрос с UDN, и возвращать имя документа.

1. Создаем два типа сообщения для посылки и приема сообщения
Соощзения лучше конечно делать типа XML и писать VALIDATION = WELL_FORMED_XML
Можно валидировать схемой.

CREATE MESSAGE TYPE [UDNRequest] VALIDATION = NONE
CREATE MESSAGE TYPE [UDNReply] VALIDATION = NONE

2. Создаем контракт. Описываем что посылается посылка, а приходит ответ:

CREATE CONTRACT [UDNContract]
   ( 
   [UDNRequest] SENT BY initiator,
   [UDNReply] SENT BY target
   )

3. Я также создаю две очереди, для посылок и ответов:

CREATE QUEUE [Inbound]
CREATE QUEUE [Outbound]

4. Теперь описываю обслуживающий сервис:

CREATE SERVICE [UDNRequestService] ON QUEUE [Inbound]
   ( 
   [UDNContract] 
   )

5. Для запросов тоже нужен сервис. Это просто заглушка, контракта у него нет
Но создать сервис нужно, это формальность

CREATE SERVICE [UDNReplyService] ON QUEUE [Outbound]
go

6. Теперь пишу процедуру для обработки сообщений в бесконечном цикле
Вообще говоря очередть вынлядит в SQL как просто таблица с некоторой магией

create procedure PROCESS
as
  -- таблица для сообщений
  DECLARE @procTable TABLE(
     service_instance_id UNIQUEIDENTIFIER,
     handle UNIQUEIDENTIFIER,
     message_sequence_number BIGINT,
     service_name NVARCHAR(512),
     service_contract_name NVARCHAR(256),
     message_type_name NVARCHAR(256),
     validation NCHAR,
     message_body VARBINARY(MAX)) ;
  declare @body varchar(max), @reply varchar(max), @UDN int
  declare @conv uniqueidentifier 
 
infinite_loop:
  -- очищаем таблицу
  delete from @procTable
 
  -- берем ровно одно сообщение
  WAITFOR( RECEIVE TOP(1)
    conversation_group_id,
    conversation_handle,
    message_sequence_number,
    service_name,
    service_contract_name,
    message_type_name,
    validation,
    message_body
  FROM Inbound INTO @procTable)
 
  -- и читаем Docs.Name
  select @body=convert(varchar(max),message_body),@conv=handle from @procTable
  if isnumeric(@body)=0 begin set @reply='Error: Non-numeric !' goto repl end
  set @UDN=convert(int,@body)
  set @reply=NULL
  select @reply=Name from Docs where UDN=@UDN
  if @reply is NULL 
    set @reply='Error: Document not found, UDN='+convert(varchar,@UDN)
 
repl:
  -- Send result
  SEND ON CONVERSATION @conv
     MESSAGE TYPE [UDNReply] (@reply)
 
  goto infinite_loop
GO

7. И процедуру для запросов:

create procedure ContactService
  @command varchar(128)
as
  declare @body varchar(max)
  declare @conv uniqueidentifier 
 
  BEGIN DIALOG  @conv
    FROM SERVICE    [UDNReplyService]
    TO SERVICE      'UDNRequestService'
    ON CONTRACT     [UDNContract];
 
  -- Посылаем команду
  SEND ON CONVERSATION @conv MESSAGE TYPE [UDNRequest] (@command)
 
  -- таблица для ответа
  DECLARE @procTable TABLE(
     service_instance_id UNIQUEIDENTIFIER,
     handle UNIQUEIDENTIFIER,
     message_sequence_number BIGINT,
     service_name NVARCHAR(512),
     service_contract_name NVARCHAR(256),
     message_type_name NVARCHAR(256),
     validation NCHAR,
     message_body VARBINARY(MAX)) ;
 
  -- ждем ответа
  WAITFOR( RECEIVE TOP(1)
    conversation_group_id,
    conversation_handle,
    message_sequence_number,
    service_name,
    service_contract_name,
    message_type_name,
    validation,
    message_body
  FROM Outbound INTO @procTable)
 
  -- декодируем ответ и печатаем
  select @body=convert(varchar(max),message_body) from @procTable
  print @body
 
  END CONVERSATION  @conv
GO

8. Запускам процедуру обслудивания сервиса

Exec PROCESS

9. А в другом окне - проверяем:

exec ContactService 'badstr'
Error: Non-numeric !
 
exec ContactService '-123'
Error: Document not found, UDN=-123
 
exec ContactService '13'
Supersivor

Интересно что так можно написать число WEB-service клиента...

Изображение пользователя ipanshin.

так можно написать

так можно написать чисто WEB-service клиента...

Не кажется ли тебе, что тогда уж лучше поставить application server? Сыровато пока.

Ты лучше расскажи как будут писаться классы объектов. Или уже библиотеки написаны? Только пользуйся? :)

это для публики для привлечения ?

Это к СТ по поводу завлечения. :) Я в основном отпугиваю.

Интересно что так

Интересно что так можно написать число WEB-service клиента...

А есть какие-нибудь механизмы по сохранению контекста работы клиента?
Если нет, то не получиться :-(.

На самом деле конечно сервися

На самом деле конечно сервися для других целей
Думаю понятие импорта и экспорта данных должно отмереть
Вместо этого одна система, например бух, сообщает другой: прими в рассмотрение такую ту накладную

Вместо этого одна

Вместо этого одна система, например бух, сообщает другой: прими в рассмотрение такую ту накладную

Романтик он во всем романтик :-)

Импорт/экспорт не умрет потому что всегда найдеться пара систем, который понимают непересекающиеся множество форматов. И между ними придеться поставить транслятор.

1С еще 2 года назад начала проект по созданию языка для обмена данными (B2B) на основе XML. Пока особых успехов нет.

Изображение пользователя ipanshin.

Я кажется нашел, где взять yuk

Я кажется нашел, где взять yukon. Хочу проверить работоспособность под yukon.

На самом деле конечно сервиса для других целей

ДЦ их надо использовать как ретрансляторы между двумя клиентами. Как? Я надеюсь, что очередность обслуживания FIFO они обеспечивают?

Изображение пользователя ipanshin.

гарантию доставки<

гарантию доставки

странно, а нас воспитывали, что гарантию дает только ГОСТРАХ :)
Т.е. сервис м.б. некоей хреновиной (недавно крутил на мясорубке много хрена (и ни хрена мне) :) ) способной синхронизировать действия двух клиентов. Например, реализация 'делай как я' или ??? В общем нечто вроде работы двух рук над одним объектом. Как?

Изображение пользователя ipanshin.

Есть еще MS Messaging. В этом

Есть еще MS Messaging. В этом и был вопрос. Это отдельная от MS Windows шняга или это сделано средствами MS Messaging? Или еще чем?
А гарантия дается в виде страховки или денежной компенсации? :)

Изображение пользователя ipanshin.

первая установка yukon на w200

первая установка yukon на w2000 advanced server со стоящими ms sql7 and ms sql2000 + vs 6.0 привели к полному краху. Yukon по хамски сказал, что ни с кем работать не будет, предыдущие предки ему не известны, родство не помнит :) , uninstall делать не захотел. В общем, похоже, что надо делать полную переустановку системы. :( Что скажет эксперт по yukon?

Извини, я не знал что ты стави

Извини, я не знал что ты ставишь... Конечно он ни с чем не совместим
Я его ставил в виртуальном компьютере VWware.... Требуются также все последние sp...

Изображение пользователя ipanshin.

Я знал на что шел. Свежие sp у

Я знал на что шел. Свежие sp у меня есть.

Конечно он ни с чем не совместим

А вот это вызывает вопрос почему? Или он вырос на пустом месте? Внебрачный отпрыск? :) sql7 & sql2000 в этом плане полная противоположность.

Изображение пользователя st.

Я его ставил в в

Я его ставил в виртуальном компьютере VWware

Я пользую Microsoft VirtualPC, который входит в поставку MSDN. Очень удобная штука: работаешь на компе ХР про, а параллельно в окне другой комп, например, с сервером 2003, который доступен по сети. Я так отлаживал приложение с медиасервисами.
Backup такой машины очень прост: копируешь единственный файл, который у неё служит диском.

Изображение пользователя ipanshin.

Дима я установил yukon под ser

Дима я установил yukon под server 2003. Но где sql manager and query analyser? Я не пойму, работают только процессы. Как впервые подступиться к этому диву?

У тебя нет такой штуки в Start

У тебя нет такой штуки в Start->SQL server 2005 ?
Значит ты чтото недоставил когда ставил SQL server
Снеси его и поставь по новой, внимательно следя что ставишь ВСЕ

Кроме того ты можешь подконнек

Кроме того ты можешь подконнектится к Yukon с помощью Query Analyzer (с другого компа), а вот старый EM с Yukon работать не будет

Изображение пользователя ipanshin.

Я это делаю дома. Я могу конеч

Я это делаю дома. Я могу конечно принести еще один комп, но боюсь меня выгонят из дома :) Нет ли у тебя russian language kit for acrobat reader v.4.0?

Изображение пользователя ipanshin.

Другой комп может

Другой комп может быть и виртуальным

программист тоже :)

SQL server management Studio

народ не может это найти. Это в msdn? Или название другое?

ни китов, ни дельфинов

м-да,обеднели :)

Грошик

Надо править - правило устало,
Нет задора, былого огня,
Нет несомого всеми металла -
Денег нет у меня...

Кузнецов уголовного счастья,
Металлистов валюты - не трож...
Мне на обломках самовластья
(снова рухнула империя, хе-хе)
Нашелся только медный грош.

Старательно я строю жизнь
На этот медный грошик,
Как птице нужны неба синь
Да горстка хлебных крошек.

Игорь, какой к черту MSDN ?Q

Игорь, какой к черту MSDN ?
QA ты в Start->SQL server ищещь или в MSDN ???

Я тебе говорю что после того как ты поставил Yukon у тебя должно появиться Start->Programs->SQL server 2005 -> и там список программ в том числе и эта хрень

Если ее нет, значит при установке YUKON ты чтото не поставил

Изображение пользователя ipanshin.

Ну ты так не сердись :) Я пон

Ну ты так не сердись :) Я понял.
Programs->SQL server 2005 -> это есть
а вот этой хрени нет(???). У MS все так, то нос отвалится, то уши :) .
Пойду искать то, что я не поставил. :)

Изображение пользователя ipanshin.

Димасравни компоненты setup

Дима
сравни компоненты setup
-sql database services
-analysis services
-reporting services
-notification services
-data transformation services
-workstation component,books online and development tool

in advancedmanagement tool
-sql server computer manager
-sql server workbench
-sql profiler
-replication manager

and that's all
никакого studio у меня в меню Start->Programs->SQL server 2005 -> не наблюдается. У меня есть меню Start->Programs->SQL server ->
Видимо у меня setup совсем другой ???

Start -> Programs -> Microsoft

Start -> Programs -> Microsoft SQL 2005
Там
Analysys Services
Notification Services
Tutorials
Business Intelligence Dev Studio
DTS tuning adviser
DTS import and Export Wizard
Profiler
Report Manager
SQL Computer manager
SQL server Bookls online
SQL server Management Studio