пятница, 1 июня 2012 г.

C# : Создание таблицы подстановки для элемента управления ComboBox, ListBoxили CheckedListBox в Windows Forms

Источник (rus)
Источник (eng)


Иногда полезно отображать данные в удобном для пользователя формате в форме Windows Forms, и при этом сохранять их в формате, требуемом в используемой программе. Например, в бланке заказа продуктов питания могут отображаться элементы меню по их имени в списке элементов. Однако таблица данных регистрации заказа будет содержать уникальные идентификаторы, представляющие продукты питания. В следующей таблице представлен пример хранения и отображения данных бланка заказа продуктов питания.


OrderDetailsTable




OrderIDItemIDQuantity
4085121
4086133


ItemTable




IDName
12Potato
13Chicken


В этом сценарии одна таблица, OrderDetailsTable, содержит фактические сведения, интересующие с точки зрения отображения и сохранения. Однако с целью экономии места они представлены в неудобном для восприятия виде. Другая таблица, ItemTable, включает только данные, связанные с представлением, а именно о том, какой код какому продукту соответствует, данные о фактических заказах продуктов в ней отсутствуют.


ItemTable связывается с элементом управления ComboBox, ListBox или CheckedListBox с помощью трех свойств. Свойство DataSource содержит имя данной таблицы. Свойство DisplayMember содержит столбец данных той таблицы, который необходимо отобразить в элементе управления (название продукта). Свойство ValueMember содержит столбец данных таблицы с сохраняемыми данными (идентификатор).


Таблица OrderDetailsTable связывается с элементом управления с помощью коллекции привязок, доступных через свойство DataBindings. При добавлении объекта привязки в коллекцию свойство элемента управления связывается с конкретным элементом данных (столбцом кодов) в источнике данных (таблице OrderDetailsTable). Когда в элементе управления сделан выбор, в данной таблицей сохраняются вводимые данные.


Создание таблицы подстановок

  1. Добавьте на форму элемент управления ComboBox, ListBox или CheckedListBox.

  2. Произведите подключение к источнику данных.

  3. Установите связь между данными в двух таблицах.

  4. Задайте следующие свойства. Они могут быть заданы в коде или в конструкторе.



    СвойствоПараметр
    DataSourceТаблица, в которой содержатся сведения о том, какому коду соответствует какой элемент. В вышеприведенном сценарии это ItemTable.
    DisplayMemberСтолбец таблицы источника данных, который необходимо отобразить в элементе управления. В вышеприведенном сценарии это "Name" (для задания в коде используйте кавычки).
    ValueMemberСтолбец таблицы источника данных, который содержит сохраняемую информацию. В вышеприведенном сценарии это "ID" (для задания в коде используйте кавычки).

  5. В процедуре вызовите метод Add класса ControlBindingsCollection для привязки свойства SelectedValue элемента управления к таблице, регистрирующей ввод формы. Кроме того, вместо кода это можно сделать в конструкторе с помощью свойства DataBindings элемента управления в окне Свойства. В вышеприведенном сценарии это OrderDetailsTable, а столбец — "ItemID".
    VB
    ListBox1.DataBindings.Add("SelectedValue", OrderDetailsTable, "ItemID")

    C#
    listBox1.DataBindings.Add("SelectedValue", OrderDetailsTable, "ItemID");

    J#
    listBox1.get_DataBindings().Add("SelectedValue", OrderDetailsTable, "ItemID");
















MSSQL : Корректное использование транзакций в хранимых процедурах

Источник

Задача:
Гарантировать корректное использование транзакционного механизма в случаях работы со сложными процедурами.

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

В примере показано использование точки сохранения транзакции для отката изменений, сделанных хранимой процедурой, если выполнение активной транзакции запущено до выполнения хранимой процедуры.



USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM sys.objects
           WHERE name = N'SaveTranExample')
    DROP PROCEDURE SaveTranExample;
GO
CREATE PROCEDURE SaveTranExample
    @InputCandidateID INT
AS
    -- Detect if the procedure was called
    -- from an active transaction and save
    -- that for later use.
    -- In the procedure, @TranCounter = 0
    -- means there was no active transaction
    -- and the procedure started one.
    -- @TranCounter > 0 means an active
    -- transaction was started before the 
    -- procedure was called.
    DECLARE @TranCounter INT;
    SET @TranCounter = @@TRANCOUNT;
    IF @TranCounter > 0
        -- Procedure called when there is
        -- an active transaction.
        -- Create a savepoint to be able
        -- to roll back only the work done
        -- in the procedure if there is an
        -- error.
        SAVE TRANSACTION ProcedureSave;
    ELSE
        -- Procedure must start its own
        -- transaction.
        BEGIN TRANSACTION;
    -- Modify database.
    BEGIN TRY
        DELETE HumanResources.JobCandidate
            WHERE JobCandidateID = @InputCandidateID;
        -- Get here if no errors; must commit
        -- any transaction started in the
        -- procedure, but not commit a transaction
        -- started before the transaction was called.
        IF @TranCounter = 0
            -- @TranCounter = 0 means no transaction was
            -- started before the procedure was called.
            -- The procedure must commit the transaction
            -- it started.
            COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        -- An error occurred; must determine
        -- which type of rollback will roll
        -- back only the work done in the
        -- procedure.
        IF @TranCounter = 0
            -- Transaction started in procedure.
            -- Roll back complete transaction.
            ROLLBACK TRANSACTION;
        ELSE
            -- Transaction started before procedure
            -- called, do not roll back modifications
            -- made before the procedure was called.
            IF XACT_STATE() <> -1
                -- If the transaction is still valid, just
                -- roll back to the savepoint set at the
                -- start of the stored procedure.
                ROLLBACK TRANSACTION ProcedureSave;
                -- If the transaction is uncommitable, a
                -- rollback to the savepoint is not allowed
                -- because the savepoint rollback writes to
                -- the log. Just return to the caller, which
                -- should roll back the outer transaction.

        -- After the appropriate rollback, echo error
        -- information to the caller.
        DECLARE @ErrorMessage NVARCHAR(4000);
        DECLARE @ErrorSeverity INT;
        DECLARE @ErrorState INT;

        SELECT @ErrorMessage = ERROR_MESSAGE();
        SELECT @ErrorSeverity = ERROR_SEVERITY();
        SELECT @ErrorState = ERROR_STATE();

        RAISERROR (@ErrorMessage, -- Message text.
                   @ErrorSeverity, -- Severity.
                   @ErrorState -- State.
                   );
    END CATCH

четверг, 24 мая 2012 г.

Конвертирование видео G2M3/G2M4

Нашел наконец рецепт, позволяющий сконверитировать видео gotomeeting
для просмотра на linux системах.
Проблема этого рецепта в том что он (рецепт) под windows.
Суть следующая:

В комплект GoToMeeting изначально входит необходимый инструментарий
для кодирования в формат Windows Media.

Но начнем по порядку.

Допустим к вам попал файл abcdef.wmv - например запись видео
конференции (основное использование встречавшееся мне), и кодированное
в G2M3/G2M4 формате.

Если Вас будет интересовать только возмжность просмотра под Windows, то
предлагаю ограничиться первым пунктом, иначе читать все:


Шаг 0(ноль).

Запустить Windows. (Ну так пост же для Линуксоидов :) )


Шаг 1.

Необходимо скачать и установить кодек, это можно сделать посетив
страницу www.gotomeeting.com/codec
По сути жмите кнопку "Install GoToMeeting Codec" и следуйте инструкциям.

Шаг 2.

После установки открываете содержимое директории (папки) C:\Program
Files\Citrix\GoToMeeting\723
, где 723 - номер установленной версии
GoToMeeting, у вас это может быть другое число. В этой папке должен находиться файл g2mtranscoder.exe.
Этот файлик и есть наше "волшебное" средство, которое и позволит
преобразовать файл из G2M3 в честный Windows Media формат.

Шаг 3.

Чтобы не засорять папку с кодеком, копируем из него 2 файла в
отдельный каталог, нам будут нужны g2mtranscoder.exe и g2m.dll.
Я предлагаю "мусорить" в родном каталоге, "C:\Documents and
Settings\<Ваш Юзернэйм>\Мои документы\Мои видеозаписи\"


Шаг 4.

Копируем в этот же каталог нашу видео запись.

ВНИМАНИЕ!!! Рекомендую работать с копией, а не с оригиналом, так как
файл будет перезаписан!!!

Шаг 5.

Открываем терминал (коммандную строку).
Для этого нажимаем Win+R, в окне "выполнить" вводим cmd и нажимаем ENTER.

Шаг 6.

Переходим в каталог "C:\Documents and Settings\<Ваш Юзернэйм>\Мои
документы\Мои видеозаписи\"

Для этого выполним команду
cd "C:\Documents and Settings\<Ваш Юзернэйм>\Мои документы\Мои видеозаписи\"


Шаг 7.

Запускаем процесс конвертирования, выполнив команду
ВНИМАНИЕ!!! Исходный файл будет перезаписан!!!

g2mtranscoder.exe source=abcdef.wmv

Команда выполнится мгновенно, но это еще не все :)


Шаг 8.

Не пугаться, и не ругаться, а проверить, висит ли в Диспетчере Задач
Windows процесс g2mtranscoder.exe
Дело в том что программа запускается в фоновом режиме, и начинает
"кушать" процессорное время, и не много памяти 200-300 Мб
Эти признаки указывают на то что у нас "процесс пошел".


Шаг 9.

Дождаться завершения g2mtranscoder.exe и проверить новый файл abcdef.wmv


Дальше можно любым конвертером продолжить преобразование файла
например в кодек THEORA.

понедельник, 21 мая 2012 г.

Linux : Установка BloGTK на Ubuntu 10.04

Сегодня представлю вольный перевод статьи найденной в сети, на этот раз о хорошем инструменте для блогов типа BlogSpot.com. Рецепт подходит для ubuntu 10.04, которой и сам пользуюсь до сих пор.

BloGTK installation on Ubuntu 10.04

Установив BloGTK на Ubuntu 10.04 из Центра приложений, я попробовал запустить программу из меню (Приложения -> Интернет), но оно не запустилось :(. Я видел только на панели задач, что окно под названием "Запуск BloGTK" появляется, но ничего не отображается. Тогда я попытался запустить его из терминала, и это то, что произошло:


  1. $ blogtk
  2. Traceback (most recent call last):
  3. File "/usr/bin/blogtk", line 14, in <module>
  4. import gtkhtml2
  5. ImportError: No module named gtkhtml2

Видим, что отсутствует модуль Python, я попытался установить его вручную, но его не оказалось в репозитариях ubuntu:


$ sudo apt-get install python-gtkhtml2
[sudo] password for sorokin: 
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
Пакет python-gtkhtml2 недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list
E: Для пакета python-gtkhtml2 не найдены кандидаты на установку

Затем я обнаружил, что BloGTK есть на Launchpad PPA, и попытался установить его оттуда:


$ sudo apt-get remove blogtk
$ sudo apt-add-repository ppa:jayreding/ppa
$ sudo apt-get update
$ sudo apt-get install blogtk

Затем я запустил вновь установленную программу (теперь он назывался blogtk2), и он открыл правильно.



p.s. Хочу добавить, клиент мне вполне понравился, но это по сути просто html редактор с подсветкой синтаксиса, ему очень сильно не хватает возможности добавления изображений, с загрузкой их в Piassa. Но это я могу сделать и через web-клиент.

суббота, 19 мая 2012 г.

MSSQL : Удаление не цифровых символов в строке

Всем привет, Сегодня хочу поделиться результатом изысканий по классической задаче, удаление всех не нужных символов. Если мы говорили бы о функциональном программировании, то тут все просто, например так:
  1. CREATE FUNCTION dbo.RemoveChars(@Input varchar(1000))
  2.     RETURNS VARCHAR(1000)
  3. BEGIN
  4.     DECLARE @pos INT
  5.     SET @Pos = PATINDEX('%[^0-9]%',@Input)
  6.     WHILE @Pos > 0
  7.     BEGIN
  8.         SET @Input = STUFF(@Input,@pos,1,'')
  9.         SET @Pos = PATINDEX('%[^0-9]%',@Input)
  10.     END
  11.     RETURN @Input
  12. END
Но, так как мы находимся в среде, SQL в моем случае MSSQL, то было найти решение не использующее скалярную функцию. Такое решение было найдено тут (http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/06eb934c-4082-4d12-ab9b-5fbe68855061/) Вот текст изначального примера:
  1. DECLARE @test TABLE(x VARCHAR(20));
  2. INSERT INTO @test (x)
  3.     SELECT '+91 (876) 098 6789' UNION ALL
  4.     SELECT '1-567-987-7655' UNION ALL
  5.     SELECT 'FR5-5105';
  6. WITH
  7.     Num1 (n) AS (SELECT 1 UNION ALL SELECT 1),
  8.     Num2 (n) AS (SELECT 1 FROM Num1 AS X, Num1 AS Y),
  9.     Num3 (n) AS (SELECT 1 FROM Num2 AS X, Num2 AS Y),
  10.     Num4 (n) AS (SELECT 1 FROM Num3 AS X, Num3 AS Y),
  11.     Nums (n) AS (SELECT ROW_NUMBER() OVER(ORDER BY n) FROM Num4),
  12.     Cleaner AS (
  13.         SELECT x
  14.         ,   (SELECT
  15.                 CASE
  16.                     WHEN SUBSTRING(x, n, 1) NOT LIKE '[^0-9]'
  17.                         THEN SUBSTRING(x, n, 1)
  18.                     ELSE ''
  19.                 END + ''
  20.             FROM Nums
  21.             WHERE n <= LEN(x)
  22.             FOR XML PATH('')) AS x_clean
  23.         FROM @test)
  24. SELECT x, x_clean
  25. FROM Cleaner;
  1. /*
  2. x x_clean
  3. -------------------- -------------
  4. +91 (876) 098 6789 918760986789
  5. 1-567-987-7655 15679877655
  6. FR5-5105 55105
  7. */
На мой взгляд просто замечательный подход, но что нам делать если такая задача будет повторяться?! Не переписывать же под каждую задачу этот кусок (мне надо было 8 полей очистить в одном единственном запросе) И тут на помощь приходят табличные функции
  1. CREATE FUNCTION fnt_RemoveNonNumericChars (@x varchar(50))
  2.     RETURN TABLE
  3. AS
  4. RETURN (
  5.     WITH
  6.         Num1 (n) AS (SELECT 1 UNION ALL SELECT 1),
  7.         Num2 (n) AS (SELECT 1 FROM Num1 AS X, Num1 AS Y),
  8.         Num3 (n) AS (SELECT 1 FROM Num2 AS X, Num2 AS Y),
  9.         Num4 (n) AS (SELECT 1 FROM Num3 AS X, Num3 AS Y),
  10.         Nums (n) AS (SELECT ROW_NUMBER() OVER(ORDER BY n) FROM Num4),
  11.         Cleaner AS (
  12. SELECT @x [x]
  13. ,    (SELECT
  14.         CASE
  15.             WHEN SUBSTRING(@x, n, 1) NOT LIKE '[^0-9]'
  16.                 THEN SUBSTRING(@x, n, 1)
  17.             ELSE ''
  18.         END + ''
  19.     FROM Nums
  20.     WHERE n <= LEN(@x)
  21.     FOR XML PATH('')) AS x_clean
  22.     )
  23. SELECT x, x_clean
  24. FROM Cleaner;
  25. )
И вот собственно вариант использования:
  1. DECLARE @test TABLE(x VARCHAR(20));
  2. INSERT INTO @test (x)
  3.     SELECT '+91 (876) 098 6789' UNION ALL
  4.     SELECT '1-567-987-7655' UNION ALL
  5.     SELECT 'FR5-5105';
  6. SELECT
  7.     t.x
  8. ,   vv.x
  9. ,   vv.x_clean
  10. FROM @test t
  11.     CROSS APPLY fnt_RemoveNonNumericChars(t.x) vv
И результат выполнения:
  1. t.x vv.x vv.x_clean
  2. -------------------- -------------------- -------------
  3. +91 (876) 098 6789 +91 (876) 098 6789 918760986789
  4. 1-567-987-7655 1-567-987-7655 15679877655
  5. FR5-5105 FR5-5105 55105
ВАЖНО!!! Если будете использовать вариант с XML имейте в виду, порядок цифр может перемешаться, наткнулся на эту проблему буквально на следующий день.
В принципе мне не очень нравится текущий вариант нумерации, но это уже лирика, ее легко можно поменять, это позволит сэкономить еще несколько тактов, особенно на больших числах.

четверг, 29 сентября 2011 г.

MSSQL : LDAP запрос.

Всем добрый день.
Рано или поздно вам возможно придется столкнуться с запросом к ActiveDirectory.
Собственно сам рецепт запроса прост:

Либо так:
  1. SELECT primaryGroupID,
  2.        primaryGroupToken,
  3.        employeeid,
  4.        sAMAccountName,
  5.        [name],
  6.        adspath,
  7.        objectGUID,
  8.        info
  9. FROM OPENQUERY (ADSI, 'SELECT name,adspath,objectGUID,info,primaryGroupID,primaryGroupToken,employeeid, sAMAccountName FROM ''LDAP://DC=MYDOMAIN,DC=RU'' WHERE objectCategory=''Group'' ORDER BY samAccountname');


Либо так:
  1. SELECT primaryGroupID,
  2.        primaryGroupToken,
  3.        employeeid,
  4.        sAMAccountName,
  5.        [name],
  6.        adspath,
  7.        objectGUID,
  8.        info
  9. FROM OPENQUERY (ADSI, N'<LDAP://DC=MORTON,DC=RU>;(&(objectClass=User)(objectCategory=Person)(|(sAMAccountName=a*)(sAMAccountName=b*)(sAMAccountName=c*)));primaryGroupID, primaryGroupToken,employeeid, sAMAccountName, name, adspath, objectGUID, info');
  10.  
  11.  


Но что делать если у вас в каталоге количество записей много? Хотя бы пара тысяч. Вот тут поможет мой рецептик, до нельзя простой.

  1.  
  2. declare @samAccountname varchar(64)
  3. declare @query varchar(4000)
  4. declare @rc int
  5.  
  6. if (object_id('tempdb..#usersgrps') is not null) drop table #usersgrps
  7.  
  8.         CREATE TABLE #usersgrps (
  9.             id INT IDENTITY,
  10.             primaryGroupID INT ,
  11.             primaryGroupToken INT ,
  12.             employeeid VARCHAR (15) ,
  13.             sAMAccountName VARCHAR (64) ,
  14.             username VARCHAR (1000),
  15.             adspath VARCHAR (1000),
  16.             isprocessed INT ,
  17.             sid VARBINARY (50),
  18.             info VARCHAR (200) ,
  19.             isgroup BIT
  20.         );
  21.  
  22. INSERT #usersgrps (primaryGroupID, primaryGroupToken, employeeid, sAMAccountName, username, adspath, isprocessed, sid, info, isgroup)
  23. SELECT TOP 900 primaryGroupID,
  24.                primaryGroupToken,
  25.                employeeid,
  26.                sAMAccountName,
  27.                [dbo].[f_string_ad_clear]([name]),
  28.                [dbo].[f_string_ad_clear](adspath),
  29.                0,
  30.                objectGUID,
  31.                [dbo].[f_string_ad_clear](info),
  32.                0
  33. FROM OPENQUERY(ADSI,
  34.         'SELECT name,adspath,objectGUID,info,primaryGroupID,primaryGroupToken,employeeid, sAMAccountName FROM ''LDAP://DC=MYDOMAIN,DC=RU'' WHERE objectCategory=''User'' ORDER BY samAccountname')
  35.  
  36. set @rc = @@rowcount
  37.  
  38. select @samAccountname = max(sAMAccountName)
  39. from #usersgrps
  40. where isgroup = 0
  41.  
  42. select @query = 'SELECT name,adspath,objectGUID,info,primaryGroupID,primaryGroupToken,employeeid, sAMAccountName FROM ''''LDAP://DC=MYDOMAIN,DC=RU'''' WHERE objectCategory=''''User'''' and samAccountname > '''''+@samAccountname+''''' ORDER BY samAccountname'
  43. print @query
  44. select @query = 'SELECT TOP 900 primaryGroupID, primaryGroupToken, employeeid, sAMAccountName, [dbo].[f_string_ad_clear]([name]), [dbo].[f_string_ad_clear](adspath), 0, objectGUID, [dbo].[f_string_ad_clear](info), 0 FROM OPENQUERY(ADSI, ''' + @query + ''')'
  45. print @query
  46.  
  47. while @rc > 0
  48.     begin
  49.         INSERT #usersgrps (primaryGroupID, primaryGroupToken, employeeid, sAMAccountName, username, adspath, isprocessed, sid, info, isgroup)
  50.         exec (@query )
  51.         set @rc = @@rowcount
  52.  
  53.         select @samAccountname = max(sAMAccountName)
  54.         from #usersgrps
  55.         where isgroup = 0
  56.  
  57.         select @query = 'SELECT name,adspath,objectGUID,info,primaryGroupID,primaryGroupToken,employeeid, sAMAccountName FROM ''''LDAP://DC=MYDOMAIN,DC=RU'''' WHERE objectCategory=''''User'''' and samAccountname > '''''+@samAccountname+''''' ORDER BY samAccountname'
  58.         print @query
  59.         select @query = 'SELECT TOP 900 primaryGroupID, primaryGroupToken, employeeid, sAMAccountName, [dbo].[f_string_ad_clear]([name]), [dbo].[f_string_ad_clear](adspath), 0, objectGUID, [dbo].[f_string_ad_clear](info), 0 FROM OPENQUERY(ADSI, ''' + @query + ''')'
  60.         print @query
  61.     end
  62.  
  63.  
  64.  
  65. INSERT #usersgrps (primaryGroupID, primaryGroupToken, employeeid, sAMAccountName, username, adspath, isprocessed, sid, info, isgroup)
  66. SELECT TOP 900 primaryGroupID,
  67.                primaryGroupToken,
  68.                employeeid,
  69.                sAMAccountName,
  70.                [dbo].[f_string_ad_clear]([name]),
  71.                [dbo].[f_string_ad_clear](adspath),
  72.                0,
  73.                objectGUID,
  74.                [dbo].[f_string_ad_clear](info),
  75.                1
  76. FROM OPENQUERY(ADSI,
  77.         'SELECT name,adspath,objectGUID,info,primaryGroupID,primaryGroupToken,employeeid, sAMAccountName FROM ''LDAP://DC=MYDOMAIN,DC=RU'' WHERE objectCategory=''Group'' ORDER BY samAccountname')
  78.  
  79. set @rc = @@rowcount
  80.  
  81. select @samAccountname = max(sAMAccountName)
  82. from #usersgrps
  83. where isgroup = 1
  84.  
  85. select @query = 'SELECT name,adspath,objectGUID,info,primaryGroupID,primaryGroupToken,employeeid, sAMAccountName FROM ''''LDAP://DC=MYDOMAIN,DC=RU'''' WHERE objectCategory=''''Group'''' and samAccountname > '''''+@samAccountname+''''' ORDER BY samAccountname'
  86. print @query
  87. select @query = 'SELECT TOP 900 primaryGroupID, primaryGroupToken, employeeid, sAMAccountName, [dbo].[f_string_ad_clear]([name]), [dbo].[f_string_ad_clear](adspath), 0, objectGUID, [dbo].[f_string_ad_clear](info), 1 FROM OPENQUERY(ADSI, ''' + @query + ''')'
  88. print @query
  89.  
  90. while @rc > 0
  91.     begin
  92.         INSERT #usersgrps (primaryGroupID, primaryGroupToken, employeeid, sAMAccountName, username, adspath, isprocessed, sid, info, isgroup)
  93.         exec (@query )
  94.         set @rc = @@rowcount
  95.  
  96.         select @samAccountname = max(sAMAccountName)
  97.         from #usersgrps
  98.         where isgroup = 1
  99.  
  100.         select @query = 'SELECT name,adspath,objectGUID,info,primaryGroupID,primaryGroupToken,employeeid, sAMAccountName FROM ''''LDAP://DC=MYDOMAIN,DC=RU'''' WHERE objectCategory=''''Group'''' and samAccountname > '''''+@samAccountname+''''' ORDER BY samAccountname'
  101.         print @query
  102.         select @query = 'SELECT TOP 900 primaryGroupID, primaryGroupToken, employeeid, sAMAccountName, [dbo].[f_string_ad_clear]([name]), [dbo].[f_string_ad_clear](adspath), 0, objectGUID, [dbo].[f_string_ad_clear](info), 1 FROM OPENQUERY(ADSI, ''' + @query + ''')'
  103.         print @query
  104.     end
  105.  
  106. select * from #usersgrps

среда, 24 августа 2011 г.

MSSQL : Hot keys SQL Server Management Studio

Еще одна вещь которая облегчает жизь, оригинал тут : http://msdn.microsoft.com/ru-ru/library/ms174205.aspx или http://msdn.microsoft.com/en-us/library/ms174205.aspx
тут нет никакой отсебятины, только копия полезной статьи.
Среда Среда SQL Server Management Studio предоставляет пользователям две схемы сочетаний клавиш. По умолчанию используется стандартная схема, при этом сочетания клавиш аналогичны применяемым в среде Microsoft Visual Studio. Вторая схема, называемая схемой SQL Server 2000, напоминает средства SQL Server 2000, в частности сочетания клавиш в программе Query Analyzer. Среда Среда SQL Server Management Studio поддерживает не все сочетания клавиш программы Query Analyzer. Чтобы изменить клавиатурную схему или добавить новые сочетания клавиш, выберите в меню Сервис пункт Параметры. Выберите предпочтительную клавиатурную схему на вкладке Среда страницы Клавиатура.
Сочетания клавиш для активации элементов меню
ДействиеСтандартная схемаСхема SQL Server 2000
Активировать строку меню среды Среда SQL Server Management StudioALTALT
Открыть меню компонента средстваALT + ДЕФИСALT + ДЕФИС
Отобразить контекстное менюSHIFT + F10SHIFT + F10
Отобразить диалоговое окно Создать файлCTRL + NНет эквивалента
Отобразить диалоговое окно Создать проект для создания нового проектаCTRL + SHIFT + NCTRL + SHIFT + N
Отобразить диалоговое окно Открыть файл для открытия существующего файлаCTRL + OCTRL + SHIFT + INS
Отобразить диалоговое окно Открыть проект для открытия существующего проектаCTRL + SHIFT + OНет эквивалента
Отобразить диалоговое окно Добавить новый элемент для добавления нового файла в текущий проектCTRL + SHIFT + AНет эквивалента
Отобразить диалоговое окно Добавить существующий элемент для добавления существующего файла в текущий проектALT + SHIFT + AНет эквивалента
Отобразить окно конструктора запросовCTRL + SHIFT + QCTRL + SHIFT + Q
Закрыть меню
или
диалоговое окно, отменив выполнение действия
ESCESC

Сочетания клавиш для управления окнами и панелью инструментов
ДействиеСтандартная схемаСхема SQL Server 2000
Закрыть текущее дочернее окно MDI-приложенияCTRL + F4CTRL + F4
ПечатьCTRL + PCTRL + P
ВыходALT + F4ALT + F4
Переключиться в полноэкранный режимSHIFT + ALT + ВВОДSHIFT + ALT + ВВОД
Закрыть окно текущего средстваSHIFT + ESCSHIFT + ESC
Перейти к следующему дочернему окну MDI-приложенияCTRL + TABCTRL + TAB
Перейти к предыдущему дочернему окну MDI-приложенияCTRL + SHIFT + TABCTRL + SHIFT + TAB
Активировать панель инструментов окна текущего средстваSHIFT + ALTНет эквивалента
Перейти к окну следующего средстваALT + F6ALT + F6
Перейти к окну, выбранному в предыдущий разSHIFT + ALT + F6SHIFT + ALT + F6
Открыть новое окно редактора запросовНет эквивалентаCTRL + O
Отобразить окно обозревателя объектовF8F8
Отобразить окно зарегистрированных серверовCTRL + ALT + GНет эквивалента
Отобразить окно обозревателя шаблоновCTRL + ALT + TCTRL + ALT + T
Отобразить окно обозревателя решенийCTRL + ALT + LCTRL + ALT + L
Отобразить окно сводкиF7F7
Отобразить окно свойствF4F4
Переключение между представлением списка сведений обозревателя объектов и областью свойств обозревателя объектов.F6Нет эквивалента
Управление разбивкой, которая разделяет представление списка сведений обозревателя объектов и область свойств обозревателя объектов, для настройки размера области отображения.TAB + СТРЕЛКА ВВЕРХ
или
TAB + СТРЕЛКА ВНИЗ
Нет эквивалента
Отобразить область элементовCTRL + ALT + XCTRL + ALT + X
Отобразить окно закладокCTRL + K, CTRL + WНет эквивалента
Отобразить окно браузераCTRL + ALT + RCTRL + ALT + R
Отобразить окно «Список ошибок» (только редактор Transact-SQL)CTRL + \, CTRL + ECTRL + \, CTRL + E

Сочетания клавиш для перемещения курсора
ДействиеСтандартная схемаСхема SQL Server 2000
Переместить курсор на одну позицию влевоСТРЕЛКА ВЛЕВОСТРЕЛКА ВЛЕВО
Переместить курсор на одну позицию вправоСТРЕЛКА ВПРАВОСТРЕЛКА ВПРАВО
Переместить курсор на одну позицию вверхСТРЕЛКА ВВЕРХСТРЕЛКА ВВЕРХ
Переместить курсор на одну позицию внизСТРЕЛКА ВНИЗСТРЕЛКА ВНИЗ
Переместить курсор в начало строкиHOMEHOME
Переместить курсор в конец строкиENDEND
Переместить курсор в начало документаCTRL + HOMECTRL + HOME
Переместить курсор в конец документаCTRL + ENDCTRL + END
Переместить курсор на один экран вверхPAGE UPPAGE UP
Переместить курсор на один экран внизPAGE DOWNPAGE DOWN
Переместить курсор на одно слово вправоCTRL + СТРЕЛКА ВПРАВОCTRL + СТРЕЛКА ВПРАВО
Переместить курсор на одно слово влевоCTRL + СТРЕЛКА ВЛЕВОCTRL + СТРЕЛКА ВЛЕВО

Сочетания клавиш для выделения текста
ДействиеСтандартная схемаСхема SQL Server 2000
Выделить текст от начала документа до курсораCTRL + SHIFT + HOMECTRL + SHIFT + HOME
Выделить текст от позиции курсора до конца документаCTRL + SHIFT + ENDCTRL + SHIFT + END
Выделить текст от начала текущей строки до курсораSHIFT + HOMESHIFT + HOME
Выделить текст от курсора до конца текущей строкиSHIFT + ENDSHIFT + END
Выделять текст по одной строке вниз, начиная от курсораSHIFT + СТРЕЛКА ВНИЗSHIFT + СТРЕЛКА ВНИЗ
Выделять текст по одной строке вверх, начиная от курсораSHIFT + ВВЕРХSHIFT + ВВЕРХ
Переместить курсор на одну строку вверх с расширением блока выделенного текстаSHIFT + ALT + СТРЕЛКА ВВЕРХSHIFT + ALT + СТРЕЛКА ВВЕРХ
Расширить блок выделенного текста на одну страницу вверхSHIFT + PAGE UPSHIFT + PAGE UP
Расширить блок выделенного текста на одну страницу внизSHIFT + PAGE DOWNSHIFT + PAGE DOWN
Выделить весь документCTRL + ACTRL + A
Выделить слово, на котором находится курсор,
или
ближайшее к курсору слово
CTRL + WCTRL + W
Выделить в редакторе блок текста от текущей до предыдущей позиций курсораCTRL + =CTRL + =
Расширить блок выделенного текста до верха текущего окнаCTRL + SHIFT + PAGE UPCTRL + SHIFT + PAGE UP
Переместить курсор в последнюю видимую на экране строку с расширением выделенного блока текстаCTRL + SHIFT + PAGE DOWNCTRL + SHIFT + PAGE DOWN
Расширить блок выделенного текста на одно слово вправоCTRL + SHIFT + СТРЕЛКА ВПРАВОCTRL + SHIFT + СТРЕЛКА ВПРАВО
Расширить блок выделенного текста на одно слово влевоCTRL + SHIFT + СТРЕЛКА ВЛЕВОCTRL + SHIFT + СТРЕЛКА ВЛЕВО
Переместить курсор на одно слово вправо с расширением блока выделенного текстаCTRL + SHIFT + ALT + СТРЕЛКА ВПРАВОCTRL + SHIFT + ALT + СТРЕЛКА ВПРАВО
Переместить курсор на одно слово влево с расширением блока выделенного текстаCTRL + SHIFT + ALT + СТРЕЛКА ВЛЕВОCTRL + SHIFT + ALT + СТРЕЛКА ВЛЕВО

Сочетания клавиш для закладок
ДействиеСтандартная схемаСхема SQL Server 2000
Установить закладку на текущей строке
или
удалить ее
CTRL + K, CTRL + KCTRL + F2
Перейти к следующей закладкеCTRL + K, CTRL + NF2
Перейти к предыдущей закладкеCTRL + K, CTRL + PSHIFT + F2
Очистить закладкиCTRL + K, CTRL + LCTRL + SHIFT + F2

Сочетания клавиш для управления деревьями
ДействиеСтандартная схемаСхема SQL Server 2000
Свернуть узлы дерева— (на цифровой клавишной панели)— (на цифровой клавишной панели)
Развернуть все узлы дерева* (на цифровой клавишной панели)* (на цифровой клавишной панели)
Прокрутить дерево вверхCTRL + СТРЕЛКА ВВЕРХCTRL + СТРЕЛКА ВВЕРХ
Прокрутить дерево внизCTRL + СТРЕЛКА ВНИЗCTRL + СТРЕЛКА ВНИЗ

Сочетания клавиш редактора кода
Отдельные редакторы кода могут поддерживать не все сочетания клавиш.
ДействиеСтандартная схемаСхема SQL Server 2000
Переключиться в полноэкранный режим
или
выйти из него
SHIFT + ALT + ВВОДSHIFT + ALT + ВВОД
Прокрутить текст вверх на одну строкуCTRL + СТРЕЛКА ВВЕРХCTRL + СТРЕЛКА ВВЕРХ
Прокрутить текст вниз на одну строкуCTRL + СТРЕЛКА ВНИЗCTRL + СТРЕЛКА ВНИЗ
Отменить последнее действие по изменению кодаCTRL + ZCTRL + Z
Восстановить отмененное действиеCTRL + SHIFT + Z
или
CTRL + Y
или
ALT + SHIFT + BACKSPACE
CTRL + SHIFT + Z
или
CTRL + Y
или
ALT + SHIFT + BACKSPACE
Вставить текст указанного файла в текущее окноНет эквивалентаCTRL + SHIFT + P
Сохранить выбранный элементCTRL + SCTRL + S
Сохранить всеCTRL + SHIFT + SCTRL + SHIFT + S
ЗакрытьCTRL + F4CTRL + F4
ПечатьCTRL + PCTRL + P
ВыходALT + F4ALT + F4
Удалить весь текст из текущего файлаCTRL + SHIFT + DELCTRL + SHIFT + DEL
Отобразить диалоговое окно Переход к строкеCTRL + GCTRL + G
Увеличить отступ перед строкойTABTAB
Уменьшить отступ перед строкойSHIFT + TABSHIFT + TAB
Преобразовать выделенный текст в верхний регистр.CTRL + SHIFT + UCTRL + SHIFT + U
Преобразовать выделенный текст в нижний регистрCTRL + SHIFT + LCTRL + SHIFT + L
Сделать выделенный текст примечаниемCTRL + K, CTRL + CCTRL + SHIFT + C
Снять комментарий с выделенного текстаCTRL + K, CTRL + UCTRL + SHIFT + R
Открыть новый запрос в контексте текущего соединенияCTRL + QCTRL + N
Открыть базу данных в обозревателе объектовALT + F8ALT + F8
Указать значения параметров шаблонаCTRL + SHIFT + MCTRL + SHIFT + M
Выполнить фрагмент кода, выделенный в редакторе запросов,
или
весь код, находящийся в редакторе запросов, если ничего не выделено
F5
или
CTRL + E
или
ALT + X
F5
или
CTRL + E
или
ALT + X
Выполнить синтаксический анализ фрагмента кода, выделенного в редакторе запросов,
или
всего кода, находящегося в редакторе запросов, если ничего не выделено
CTRL + F5CTRL + F5
Отобразить предполагаемый план выполненияCTRL + LCTRL + L
Отменить выполняемый запросALT + BREAKALT + BREAK
Включить действительный план выполнения в данные, выведенные запросомCTRL + MCTRL + K
Открыть диалоговое окно Параметр запросаНет эквивалентаCTRL + SHIFT + O
Вывести результаты в сеткуCTRL + DCTRL + D
Вывести результаты в текстовом форматеCTRL + TCTRL + T
Вывести результаты в файлCTRL + SHIFT + FCTRL + SHIFT + F
Отобразить
или
скрыть панель результатов выполнения запроса
CTRL + RCTRL + R
Переключение между панелями запроса и результатов выполнения запросаF6F6
Перейти к следующему активному окну в Management Studio CTRL + F6CTRL + F6
Скрыть все автоматическиALT + ВВОДНет эквивалента
ОкнаCTRL + WНет эквивалента
Открыть приложение Приложение SQL Server ProfilerCTRL + ALT + PCTRL + ALT + P

Сочетания клавиш для работы с текстом в редакторе кода
ДействиеСтандартная схемаСхема SQL Server 2000
Вставить символ переноса строкиВВОД
или
SHIFT + ВВОД
ВВОД
или
SHIFT + ВВОД
Поменять местами два символа, расположенные слева и справа от курсора (неприменимо в редакторе SQL)CTRL + TНет эквивалента
Удалить символ, расположенный справа от курсораDELETEDELETE
Удалить символ, расположенный слева от курсораBACKSPACE
или
SHIFT + BACKSPACE
BACKSPACE
или
SHIFT + BACKSPACE
Вставить в текст последовательность пробелов, длина которой указана в настройках редактораTABTAB
Вставить в текст пустую строку выше курсораCTRL + ВВОДCTRL + ВВОД
Вставить в текст пустую строку ниже курсораCTRL + SHIFT + ВВОДCTRL + SHIFT + ВВОД
Преобразовать выделенный текст в нижний регистрCTRL + SHIFT + LCTRL + SHIFT + L
Преобразовать выделенный текст в верхний регистрCTRL + SHIFT + UCTRL + SHIFT + U
Переключение между режимами вставки и замены текстаINSERTINSERT
Переместить выделенные строки к левой позиции табуляцииSHIFT + TABSHIFT + TAB
Удалить слово, расположенное справа от курсораCTRL + DELETECTRL + DELETE
Удалить слово, расположенное слева от курсораCTRL + BACKSPACECTRL + BACKSPACE
Поменять местами слова, расположенные слева и справа от курсора (неприменимо в редакторе SQL)CTRL + SHIFT + TCTRL + SHIFT + T

Сочетания клавиш отладчика Transact-SQL
ДействиеStandardSQL Server 2000
Начать
или
продолжить отладку
ALT + F5Нет эквивалента
Остановить отладкуSHIFT + F5Нет эквивалента
Шаг с заходомF11Нет эквивалента
Шаг с обходомF10Нет эквивалента
Шаг с выходомSHIFT + F11Нет эквивалента
Реализация команды Выполнить до курсораCTRL + F10Нет эквивалента
Отобразить диалоговое окно Контрольное значениеQuickWatch.CTRL + ALT + QНет эквивалента
Переключить точку остановаF9Нет эквивалента
Удалить все точки остановаCTRL + SHIFT + F9Нет эквивалента
Отобразить окно Точки остановаCTRL + ALT + BНет эквивалента
Приостановить всеCTRL + ALT + BREAKНет эквивалента
Отобразить окно Просмотр значений 1CTRL + ALT + W, 1Нет эквивалента
Отобразить окно Просмотр значений 2CTRL + ALT + W, 2Нет эквивалента
Отобразить окно Просмотр значений 3CTRL + ALT + W, 3Нет эквивалента
Отобразить окно Просмотр значений 4CTRL + ALT + W, 4Нет эквивалента
Отобразить окно Автоматические значенияCTRL + ALT + V, AНет эквивалента
Отобразить окно Локальные значенияCTRL + ALT + V, LНет эквивалента
Отобразить окно ИнтерпретацияCTRL + ALT + IНет эквивалента
Отобразить окно Стек вызоваCTRL + ALT + CНет эквивалента
Отобразить окно ПотокиCTRL + ALT + HНет эквивалента

Сочетания клавиш для технологии Microsoft IntelliSense
ДействиеСтандартная схемаСхема SQL Server 2000
Показать список элементовCTRL + ПРОБЕЛ
или
CTRL + J
CTRL + J
Дополнить словоALT + ВПРАВОALT + ВПРАВО
Сведения о параметрахCTRL + SHIFT + ПРОБЕЛНет эквивалента
Обновление локального кэшаCTRL + SHIFT + RНет эквивалента
Перейти между синтаксическими парамиCTRL + ]Нет эквивалента

Сочетания клавиш для окна документов и браузера
ДействиеСтандартная схемаСхема SQL Server 2000
Переключиться в полноэкранный режим
или
выйти из него
SHIFT + ALT + ВВОДSHIFT + ALT + ВВОД
Перейти к следующей панели представления документа с разделенными панелямиF6F6
Перейти к предыдущему документу в редакторе
или
конструкторе
CTRL + SHIFT + F6 CTRL + SHIFT + TABCTRL + SHIFT + F6 CTRL + SHIFT + TAB
Перейти к предыдущей панели документа в представлении с разделенными панелямиSHIFT + F6SHIFT + F6
Отобразить окно браузераCTRL + ALT + RCTRL + ALT + R
Отобразить предыдущую страницу в журнале просмотра страницALT + ВЛЕВОALT + ВЛЕВО
Отобразить следующую страницу в журнале просмотра страницALT + ВПРАВОALT + ВПРАВО

Сочетания клавиш обозревателя решений
ДействиеСтандартная схемаСхема SQL Server 2000
Отобразить окно обозревателя решенийCTRL + ALT + LCTRL + ALT + L
Отобразить диалоговое окно Создать файлCTRL + NCTRL + SHIFT + INS
Отобразить диалоговое окно Создать проект для создания нового проектаCTRL + SHIFT + NCTRL + SHIFT + N
Отобразить диалоговое окно Открыть файл для открытия существующего файлаCTRL + OНет эквивалента

Сочетания клавиш для работы со справкой и электронной документацией
ДействиеСтандартная схемаСхема SQL Server 2000
СправкаF1F1
Справка по разделу «Инструкции»CTRL + F1CTRL + F1
Выбрать в электронной документации вкладку «Оглавление»CTRL + ALT + F1CTRL + ALT + F1
Выбрать в электронной документации вкладку «Указатель»CTRL + ALT + F2CTRL + ALT + F2
Открыть в справочной системе окно поискаCTRL + ALT + F3CTRL + ALT + F3
Динамическая справкаCTRL + ALT + F4CTRL + ALT + F4
Избранные разделы справкиCTRL + ALT + FCTRL + ALT + F

Сочетания клавиш для поиска
ДействиеСтандартная схемаСхема SQL Server 2000
Отобразить диалоговое окно НайтиCTRL + FCTRL + F
Отобразить диалоговое окно ЗаменитьCTRL + HCTRL + H
Начать последовательный поиск. Введите последовательность символов, которую нужно найти,
или
нажмите CTRL + I для поиска тех же символов, что и в предыдущий раз.
CTRL + ICTRL + B
Найти следующее вхождение искомой последовательности символов в текстF3F3
Найти предыдущее вхождение искомого текстаSHIFT + F3SHIFT + F3
Найти следующее вхождение выделенного текстаCTRL + F3CTRL + F3
Найти предыдущее вхождение выделенного текстаCTRL + SHIFT + F3CTRL + SHIFT + F3
Отобразить диалоговое окно Заменить в файлахCTRL + SHIFT + HCTRL + SHIFT + H
Изменить направление поиска с уточнением критериев, чтобы он выполнялся от конца файла к началуCTRL + SHIFT + ICTRL + SHIFT + I
Установить
или
снять флажок Искать вверх в диалоговом окне Найти и заменить
ALT + F3, BALT + F3, B
Остановить выполнение операции Найти в файлахALT + F3, SALT + F3, S
Установить
или
снять флажок Искать слово в диалоговом окне Найти и заменить
ALT + F3, WALT + F3, W
Установить
или
снять флажок Шаблон в диалоговом окне Найти и заменить.
ALT + F3, PALT + F3, P

Сочетания клавиш для вырезания и вставки текста
ДействиеСтандартная схемаСхема SQL Server 2000
Вырезать (удалить выделенный элемент и поместить его в буфер обмена)CTRL + X
или
SHIFT + DELETE
CTRL + X
или
SHIFT + DELETE
Скопировать данные в буфер обменаCTRL + C
или
CTRL + INSERT
CTRL + C
или
CTRL + INSERT
Вставить данные из буфера обмена в позицию вставкиCTRL + V
или
SHIFT + INSERT
CTRL + V
или
SHIFT + INSERT

Сочетания клавиш средства просмотра журналов
ДействиеСтандартная схемаСхема SQL Server 2000
ОбновитьF5F5
Переключаться между панелями Выбор журналов и Сведения журналаF6F6
Перейти на панель Сведения журналаALT + SALT + S
Загрузить новый журналCTRL + SHIFT + LCTRL + SHIFT + L
Экспортировать журналCTRL + SHIFT + ECTRL + SHIFT + E
Отфильтровать журналCTRL + SHIFT + FCTRL + SHIFT + F
Поиск в журналеCTRL + SHIFT + SCTRL + SHIFT + S

Сочетания клавиш монитора активности
ДействиеСтандартная схемаСхема SQL Server 2000
ОбновитьF5F5
Отфильтровать отображаемые монитором сведенияCTRL + SHIFT + FCTRL + SHIFT + F

Сочетания клавиш монитора репликации
ДействиеСтандартная схемаСхема SQL Server 2000
ОбновитьF5F5
Открыть окно сведений из сеткиВВОДВВОД

Сочетания клавиш средства просмотра конфликтов репликации
ДействиеСтандартная схемаСхема SQL Server 2000
Определить фильтрF6F6
Применить фильтрF7F7
Показать все столбцыF8F8