Comparing varchar to nvarchar in SQL

A few days ago I listened to a new episode of the .NET Rocks podcast, with Kimberly Tripp on the show. While she was going through the list of things every developer needs to know, one in particular caught my interest. She mentioned we should use the different types consistently in the database. Not using types consistently within your database can cause quite some performance loss. This is because SQL Server ‘upcasts’ the minor type to the higher type (example: varchar to nvarchar). Read more →

SQL Idenity insert

Onlangs moest ik enkele records restoren in een SQL database, omdat die waren verwijderd. Op zich geen probleem, afgezien van het feit dat er een primary key op een van de kolommen zat die automatisch werd verhoogd. Nogal vervelend als je een record moet toevoegen met een specifieke primary key. Ik kreeg dan ook de volgende melding: _An explicit value for the identity column in table ‘<TABLE_NAME>’ can only be specified when a column list is used and IDENTITY_INSERT is ON. Read more →

MS SQL Server 2005 en CROSS APPLY

Vandaag kreeg ik het verzoek om in een view alle gekoppelde medewerkers in 1 kolom te tonen die bij een client horen. Dit kan een behoorlijk lastige klus zijn en ik wist ook niet precies hoe ik zoiets zou moeten gaan oplossen. Een CURSOR zou mogelijk zijn, maar dat gebruik ik liever niet in de view die ik nu moet maken. Na even zoeken kwam ik achter een nieuwe functie die bij SQL 2005 is geimplementeerd en gelukkig ook in SQL 2008 werkt, namelijk de CROSS APPLY. Read more →

‘Repopulate’ een MS SQL Server 2005

Iedere keer wanneer we een Full-Text catalogus opnieuw moeten populaten is het weer een probleem. De optie Repopulate catalog is grijs en kun je dus niet starten via de interface. In SQL 2000 kon dit nog wel. Inmiddels weten we dat dit niet kan en iedere keer lossen we het weer op door even 5 minuten te Googlen. Zelf vergeet ik namelijk altijd hoe dit gedaan moet worden, omdat je dit eigenlijk nooit doet. Read more →

Wijzigen van servernaam in MS SQL Server

Bij ons op het werk hebben we een standaard virtuele pc die we kunnen inzetten voor verschillende doeleinden/klanten. Dit werkt perfect en is ook zeker aan te raden voor ontwikkel werkzaamheden met Sharepoint opdrachten. Het nadeel van zo’n standaard image is dat de machine 1 naam heeft. Als alle ontwikkelaars dus zo’n machine opstarten, dan zijn er verschillende machines met dezelfde computernaam in het netwerk. In hoeverre het netwerk daar blij mee is weet ik niet, maar zelf vind ik het in ieder geval niet zo mooi. Read more →

SQL replicatie tussen Standard en Express

Momenteel ben ik bezig met een project waarbij ik heb gekozen om gebruik te gaan maken van SQL replicatie tussen een SQL Server 2005 Standard en een SQL Server 2005 Express editie. Door gebruik te maken van de standaard replicatie methoden hoef ik zelf geen applicatie meer te maken welke eigenlijk precies hetzelfde doet, namelijk tabellen, stored procedures en functies synchroniseren tussen 2 databases. Het opzetten van een Publication en Subscription is helemaal niet lastig. Read more →

Nieuwe vorm van SQL injection

Vandaag kwamen we op het werk een interessant stukje SQL injection tegen. Hoe je ’normaal’ een SQL injection aanval doet op een website is mij wel redelijk bekend. Gewoon in de querystring iets toevoegen als ';SELECT%20Naam%20FROM%20Tabel of iets in die trend. Niet echt hogere wiskunde dus. Als de variabele niet goed is beveiligd in de website danwel de database, dan kun je voor verassende dingen komen te staan. Vandaag zagen we echter een variant op het bovengenoemde fenomeen, namelijk een binaire string toevoegen in je querystring. Read more →

Dynamisch LINQ queries maken met Lambda expressies

In de data access laag van m’n projecten werd het nu toch wel een drukke boel met verschillende LINQ to SQL queries. Aangezien je namelijk niet goed dynamische LINQ-queries kunt maken, moet je eigenlijk voor iedere ‘uitzondering’ een aparte query maken. Je krijgt dan zoiets als dit: if (criteria.PeriodeVan != null && criteria.PeriodeTot != null) { var query = (from post in dataContext.GetTable() where post.Item.CreatieDD >= criteria.PeriodeVan && post.Item.CreatieDD <= criteria. Read more →

De grootte van je database tabellen

De afgelopen tijd merkte ik op dat de grootte van een bepaalde database waar ik vaak mee werk behoorlijk groot wordt in korte tijd. Om te onderzoeken aan welke tabel dit te wijten was moest ik weten hoe groot iedere tabel was. Dit kan uiteraard door de eigenschappen van iedere tabel op te vragen, maar als je meer dan 50 tabellen hebt duurt dit veel te lang. Dat moet ook automatisch kunnen. Read more →

Tabel fragmentatie in SQL Server 2000 en 2005

Afgelopen week las ik iets over tabel fragmentatie. Hier had ik eigenlijk nog nooit van gehoord. Wel van bestandsfragmentatie en dergelijke, maar nog nooit dat tabellen ook gefragmenteerd kunnen raken. Op zich wel logisch natuurlijk als er veel in wordt gewijzigd. Belangrijke punten waaraan je tabel fragmentatie aan kunt herkennen zijn: Langzame performance Veel disk activiteit Weinig gebruik van caching Fragmentatie treedt op wanneer er data wordt gewijzigd met INSERT, UPDATE en DELETE statements. Read more →