By an anonymous SQL user (a guest blogger)
1. SQL is too complicated!
When I have multiple values in my columns, like "JAN,FEB,MAR" or “15,84,22” , SQL Server just doesn't get it. It's almost impossible to write SQL statements on tables like that! If I can manage to get any data out at all, it ends up being a 500 line SELECT statement!! What is up with that? And it also takes an act of God to successfully delete a value from those lists. Why does MS make things so complicated?
2. Datatype conversions!
What is the deal with data types? I just use VARCHAR for everything, since that's the only way to avoid stupid error messages when I add data to my tables. Works great, until I want to get the month of a date or add two numbers -- stupid SQL Server makes me convert() the value first. How dumb is that? SQL doesn't know how to add "12" and "5" -- it thinks it's "125" !!!! To make things even worse, SQL Server gives me errors half the time saying it CAN'T convert! Uh, you are a computer; you should be able to figure this stuff out.
3. Uh .... Formatting?
We've all been there: You want to right-justify a column in your SELECT -- it cannot be done without jumping through hoops! Never mind centering, indenting, page numbers, or things like that. Also, it is really a pain to format dates or round numbers just the way I want. I can barely write a decent looking report using Query Analyzer, it looks like old MS-DOS text files! Maybe it's time to move into the 21st century with some support for graphics, colors and fonts, huh Microsoft?
4. Sorting is broken!
Half the time my records come back OUT OF ORDER! That’s right, not sorted by anything! It's a mess. SQL Server should understand that things should be sorted by lastname/firstname or by date without me having to tell it! This is supposed to be a smart computer, right? My users really hate this, because it’s hard to find stuff on their reports. When they complain, I just tell them, “Hey, maybe if you weren’t so cheap and we had Oracle we wouldn’t have to deal with this Microsoft ‘feature’! ”
To make things even worse, when I do try to sort, SQL Server thinks that “December” comes before “January”, or that “10” is less than “2”! Uh, Mr. Gates, no wonder you never release your products on schedule, you guys have no concept of how a calendar works!
5. The IN() operator never works!
This one drives me nuts. Using IN (@Var) never works right! I never get back what I want, even though @Var clearly has a nice list of ID’s in it. And you don't even get an error message!
6. Foreign Keys Constraints !
For some reason, in SQL you can only update or add rows to 1 table at a time! I can do my usual FULL OUTER JOINs with 800 tables together and go nuts with SELECTs all day long, but how about providing that feature for UPDATES and INSERTS!? Otherwise, how can I have referential integrity? If table A needs a matching row in table B, then how the heck do I get them in there at the exact same time? This seems pretty silly to me.
7. Primary Keys don't work!
This drives me nuts. I have an identity primary key called "ID" on every table, but I still get duplicate data! I must have 20 different entries for Vermont in my “tblStatesTable” table! What's the point of primary keys, then? I hope the next service release fixes this.
8. S-Q-L is S-L-O-W !!!
What is the deal with how slow SQL is? For example, to find all of the data for January in my table, I use
WHERE LTRIM(tblTable.tblTable_colMonthList) LIKE '%JAN%'
Pretty standard stuff. But it takes FOREVER! And the column is indexed!! Hey, Micro-slow, the index is supposed to make things FASTER you know!
9. Cryptic Error Messages!
So, I try to add data to my table and I get this back:
INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'FK_Order_Details_Orders'. The conflict occurred in database 'Northwind', table 'Orders', column 'OrderID'. The statement has been terminated.
Or I try to write a simple GROUP BY and get:
Column 'orders.OrderID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Or sometimes I build some cool dynamic SQL strings, but they don't seem to work and I get:
You are not allowed to truncate the system table 'master..sysobjects'.
Hello? How about some details about what went wrong, not just cryptic mumbo-jumbo that's too long to read. Hey, Bill Gates, how about spending some of your $$$ making sure SQL Server is bug-free and doesn't generate all these nonsense error messages! Who has time to interpret all this crap?
10. Table and Column referencing!
This one is crazy. OK, we have smart computers, right? And we have things called variables, right? We can store anything in these variables, even column and table names. But this never works:
Select @TableName.@ColumnName from @TableName
Makes sense to you, makes sense to me, I don't know why SQL Server cannot figure it out! How can I get data from 'tblCustomerNumber0121' versus 'tblCustomerNumber0122', or get data for column 'Jan2005', if I cannot use variables here!? These things must be hard-coded!? How the heck am I supposed to write reports with user parameters when I am limited to pre-defined table and column names!? Come on, Micro-stupid, how about some REAL programming features in T-SQL like FULL support for variables!
It's also a real pain to add new data to tables. INSERT? That never works! INSERT can't even add a new column to my tables! How am I supposed to add data for a new month when I don't have that column yet? Maybe SQL Server 2005 will finally address this.
(Note from Jeff: All comments are welcome, but please be sure to read some of the other comments before posting ... thanks! It also might help to read this