Jak badać w poziomie batch-a wynik polecenia sqlcmd?

2011-11-19

SQLCmd to polecenie pozwalające na uruchamianie w trybie wsadowym skryptów SQL. Można go użyć np w edycji Express, do regularnego wykonywania kopii zapasowej (co było już opisane na mobilo/mobilo24). Jak jednak zbadać, jaki jest wynik działania polecenia SQLCmd z poziomu „dos-owego batch-a”, który uruchomił skrypt?

Załóżmy, że w batch-u masz polecenie:

sqlcmd -i D:\skrypty\kopia.sql -o d:\tmp\kopia.out

Jeżeli dojdzie do błędu związanego np. z brakiem pliku d:\skrypty\kopia.sql, to sqlcmd zwróci status błędu i możesz go sprawdzić badając zawartość zmiennej systemu operacyjnego %errorlevel%

Czytaj dalej »

By Rafał Kraik in Błedy, SQL

Sortowanie arkuszy skoroszytu według nazw (makro)

2011-11-14

Pytanie od znajomej, którą zapytał jej przełożony:

Czy da się posortować akrusze w skoroszycie Excela alfabetycznie?

Ano da się. Makrem. Rozwiązanie pochodzi z tego miejsca: http://www.teachexcel.com/free-excel-macros/m-49,sort-worksheet-tabs.html

Na wszelki wypadek makro sortujące arkusze  umieszczam poniżej: Czytaj dalej »

By Rafał Kraik in Helpdesk

ASP.NET – Jak po kliknięciu przycisku otworzyć nowe okno (bez postback)?

2011-11-11

Można na stronie, która zawiera przycisk w Page_Load dopisać:

LinkButton1.Attributes.Add(„onclick”, „window.open(’new.aspx’,”,”); return false;”);

window.open to polecenie JavaScript, która otwiera nowe okno, a w nim stronę new.aspx.

return false widoczne na koncu powoduje, że obsłużenie kliknięcia odbywa się na kliencie, bez postback-a.

Procedura składowana – BEGIN i END

2011-11-11

Zamierzasz utworzyć procedurę, którą będzie uruchamiał pewien nowy użytkownik. Tworzymy więc konto użytkownika:

USE Test
GO
CREATE USER TestUser WITHOUT LOGIN
GO

Teraz dla użytkownika utworzymy procedurę i nadamy uprawnienia dla tego użytkownika:

CREATE PROCEDURE TestIt
AS
BEGIN
 SELECT file_id, name
 FROM sys.database_files
END
GRANT EXECUTE ON TestIt TO TestUser
GO

Uwaga! Uruchamiając ten kod zaznacz go w całości (nie kawałek po kawałku). Czytaj dalej »

By Rafał Kraik in Błedy, SQL

Dla kontrolek umieszczonych w tabeli asp:table nie można wyświetlać właściwości (properties)

2011-11-05

Rzeczywiście, jeżeli w tabeli asp umieścisz inne kontrolki asp, to nie ma możliwości wyświetlenia properties dla tych kontrolek. Nie działa również F4. Jednyna możliwość to ręczne wypełnianie właściwości, czego przecież chcemy uniknąć.

Jeżeli Twoim celem jest po prostu rozmieszczenie kontrolek na stronie, to lepiej użyj zwykłej tabelki (tej HTML-owej, a nie ASP). W przypadku tej tabeli wszystko działa jak należy!

Jak zmienić szerokość strony ASP opartej o master page?

2011-11-04

Strona wykorzystuje szablon CSS. W moim przypadku musiałem otworzyć plik Styles/Site.css, a w nim dokonać zmiany szerokości w kilku miejscach:

  • body
  • page
  • header
  • main
  • footer

Wszędzie musiała się pojawić linijka poszerzająca moją stronę na 1200 pikseli:

   width: 1200px;

 Mimo tych zmian strona nie od razu reagowała na zmianę szerokości. W IE musiałem wyczyścić cache przeglądarki.

Parametr dla procedury to nie to samo co zmienna w zapytaniu ad-hoc. Wykorzystanie planów wykonania.

2011-10-29

Ten przykład pokaże, że co innego jest napisać i dobrze wykorzystać procedurę składowaną z parametrami, a co innego ten sam kod wykonać jako zapytanie ad-hoc, nawet jeżeli pewne wartości do zapytania będą przekazywane poprzez zmienne.

Będziemy pracować w testowej bazie danych:

use AdventureWorks2008R2

Zauważ, jak zachowuje się poniższe zapytanie:

 SELECT * FROM Sales.SalesOrderHeader
 WHERE OrderDate BETWEEN '2005-07-21′ AND '2005-07-22′

jeśliby zajrzeć do planu wykonania zobaczysz, że robi table scan. Gdyby nasi użytkownicy mieli częściej wykonywać tego rodzaju analizy, to możemy dla nich utworzyć indeks:

CREATE NONCLUSTERED INDEX IX_SalesOrderHeader_OrderDate
ON  Sales.SalesOrderHeader(OrderDate)

Zobaczmy czy nasze zapytanie zauważyło tę zmianę: 

 SELECT * FROM Sales.SalesOrderHeader
 WHERE OrderDate BETWEEN '2005-07-21′ AND '2005-07-22′

O tak. Tym razem optymalizator zaproponował, że wykona nonclustered index seek. Super! To zobaczmy, co się stanie, jeżeli sparametryzujemy kwerendę:

 –zmieniam date na zmienna:
 DECLARE @d1 DATETIME = '2005-07-21′
 DECLARE @d2 DATETIME = '2012-07-22′
 SELECT * FROM Sales.SalesOrderHeader
 WHERE OrderDate BETWEEN @d1 AND @d2;

Zapytanie zadziałało, ale wykonany został table scan! Co najmniej, jakby serwer nie zauważył, że w zmiennych nadal znajdują sie te same dane. Na całe szczęście dysponujemy hintami (wskazówkami), którymi można wskazać serwerowi, że zapytanie ma wykonać tak, jakby zmienne miały określone wartości. Wspomniany hint to OPTIMIZE FOR. Zaobserwuj plan wykonania tego zapytania: Czytaj dalej »

By Rafał Kraik in SQL