A HUG-MSSQL a PASS tagja lett!
Egy éve írtam egy posztot anno a Horváth Zoli által szervezett SQL meetupokról, hát mit mondjak, szépen kinőtte magát a csoport. Hurrá és grat! :)
Az első PASS-os előadás május 29-én lesz, el ne felejtsétek! :)
2013. május 7., kedd
2013. március 23., szombat
Msg 11305
Execute a query on SQL Server 2008 such as this:
- SELECT COUNT (ItemID) OVER (ORDER BY OrderID) FROM OrderDetails;
Msg 11305, Level 15, State 10, Line 1
The Parallel Data Warehouse (PDW) features are not enabled.
Really? Thank you for telling me but what can I do now?
OK, the reason of failure is simple. ORDER BY in OVER clause on an aggregate function works only in version 2012. But this message doesn't help much in debugging.
2012. augusztus 24., péntek
Mennyi az idő?
Mai villámkérdésünk: az alábbi kódban mi lehet a @num változó két szélső értéke (min/max)?
És ha a @date típusa datetime2?
DECLARE @date datetime, @num float
SET @date = @num
És ha a @date típusa datetime2?
2012. augusztus 21., kedd
Update csavarral
Mi a történik akkor,
ha egy tábla rekordjait rangsorolnám, és ezt a rangsort rögzíteném is a tábla
egy új
oszlopában? Mondjuk így:
- UPDATE Buildings SET nRank = ROW_NUMBER() OVER (ORDER BY nHeight);
Ez történik:
Windowed functions can only appear in
the SELECT or ORDER BY clauses.
Szóval csak SELECT vagy ORDER BY. Szerencsére ez nem olyan
nagy gond. Használhatunk CTE-t, beágyazott query-t vagy view-t, és már
teljesítettük is a fenti megkötést. Hogy pontosan hogyan, az ebből a
script-sorból kiderül. A CTE-s verziót be is kopizom ide (szerintem ez a
legelegánsabb).
- WITH Ranking AS
- (
- SELECT
- nRank
- ,ROW_NUMBER() OVER (ORDER BY nHeight) AS nComputedRank
- FROM
- Buildings
- )
- UPDATE
- Ranking
- SET
- nRank = nComputedRank;
Nagy rekordszám esetén érdemes elgondolkodni egy indexelt
temp tábla használatán. A lemezre írásnak ugyan van költsége, de lehet, hogy
ezt az indexek miatt bőven behozzuk az update-nél.
Címkék:
2005,
2008,
2012,
CTE,
DENSE_RANK,
RANK,
ROW_NUMBER,
UPDATE
2012. július 24., kedd
SPID = -2
Hegedűs Miklós kollégám - miután az SSIS a kezei közt lehelte ki a lelkét egy pakk futtatása közben -, észrevette, hogy az SQL Server-en, az SSIS után beragadt session a rejtélyes -2-es azonosítót kapta. Ezt sajnos a KILL parancs nem tudja kezelni, hibával elszáll:
Msg 6101, Level 16, State 1, Line 1
Process ID -2 is not a valid process ID. Choose a number between 1 and 2048.
Kis nyomozás után Miki a megoldást is megtalálta Utsab Chattopadhyay blogján, a CONSULTDBA-n. A -2 az elárvult MSDTC session-öknek dedikált azonosító. Ha a session-t kézzel kell lezárnunk, használhatjuk a KILL-t, ami egy SPID-et, vagy egy UOW (Unit Of Work) azonosítót vár paraméterként. Mivel az előbbi csak 1 és 2048 közé eshet, keressünk egy UOW id-t. A CONSULTDBA szerint így:
- SELECT req_transactionUOW FROM master..syslockinfo WHERE req_spid = -2;
- SELECT request_owner_guid FROM master.sys.dm_tran_locks WHERE request_session_id = -2;
2012. június 21., csütörtök
Migrating MySQL to MS SQL
I got a question about the available solutions of migration from MySQL to MS SQL. Well, I have you admit I haven’t experiences of this but I found this topic very interesting. So I looked for a difficulties and possibilities.
I had a guess that I can solve parts of this task with SSIS. But perhaps this isn’t the best solution because SSIS can’t migrate right the procedures, triggers, etc.
I found two better way, both are tools designed directly to this job. One of these options is Spectral Core’s SQLTRAN that you can buy for 999 USD. This can also translate between the two SQL dialects (i.e. inside of stored procedures).
The other way is the free Microsoft migration tool, called SQL Server Migration Assistant (SSMA). This has many options and features too. On the website of this application you will find many useful links and there is a guideline to migrating that contains the most important issues and the main differences between these two databases.
Update:
Additionally, I recently read about one more solution that's called SwisSQL.
Additionally, I recently read about one more solution that's called SwisSQL.
2012. június 3., vasárnap
Hány bit egy byte?
Két napja kérdezték tőlem, hogy egy bit típusú oszlop mennyivel növeli meg egy sor méretét? Kis gondolkodás után azt válaszoltam, hogy egy byte-tal. És kettő? Két byte-tal - válaszoltam gyanútlanul, és már bele is sétáltam a csapdába.
Az SQL Server ugyanis trükkösen tárolja a bit típusú adatokat. Nyolc bit egy byte, ennek megfelelően nyolc bit típusú oszlop fér el egyetlen byte-on. Ha az oszlopok száma 1 és 8 között van, akkor 1 byte-ot foglalnak, ha 9 és 16 között, akkor 2 byte-ot, és így tovább.
Az SQL Server ugyanis trükkösen tárolja a bit típusú adatokat. Nyolc bit egy byte, ennek megfelelően nyolc bit típusú oszlop fér el egyetlen byte-on. Ha az oszlopok száma 1 és 8 között van, akkor 1 byte-ot foglalnak, ha 9 és 16 között, akkor 2 byte-ot, és így tovább.
Feliratkozás:
Bejegyzések (Atom)