Maximum row length issue in SQL2000

  • I am using a script to basically make a copy of an existing SQLServer 2000 table under a new name. According to a count of the number of bytes in the original table, the row length is 6013. When I run the script in query analyzer to create the new table, the table is created but I'm warned that the maximum row length is nearly double the 6000, and that inserts will fail, etc. What am I missing here?

    Thanks to any and all.

    Dave Dufour

    http://www.du4.com/dave


    Dave Dufour
    http://www.du4.com/dave

  • Sounds like maybe you scripted everything as unicode, using nchar, nvarchar, etc?

    Andy

  • Yes, quite a few nvarchars.

    Dave Dufour

    http://www.du4.com/dave


    Dave Dufour
    http://www.du4.com/dave

  • Did your original table use varchars or nvarchars? Unicode takes twice as many characters as a plain char.

    Andy

  • yes, the two tables are essentially identical, but the duplicate has an on additional int field (an ID). we're using nvarchars all the way through. One of these is particularly large (3000). It may be that I need to split that one off into its own table. Are you saying that an nvarchar (50) for example actually uses 100 bytes?

    Dave Dufour

    http://www.du4.com/dave


    Dave Dufour
    http://www.du4.com/dave

  • That's correct. N's take twice the space to store the data, Unicode takes two bytes to represent one "character".

    Andy

  • Thanks. That makes a big difference. Can I replace these nvarchar fields with the text type field? The app we have built needs will take input from Europe as well as the US. It appears to accept the European type characters Ä,Ö,ß and the like, and doesn't produce the overhead. Is there a downside to this?

    Dave Dufour

    http://www.du4.com/dave


    Dave Dufour
    http://www.du4.com/dave

  • If you know the maximum lenght is 4000 then varchar should be able to support you. Try it in another table with these characters. If not then ntext will support you but you will not be able to perform a query using the column with the text search engine installed.

    "Don't roll your eyes at me. I will tape them in place." (Teacher on Boston Public)

  • If you're supporting international apps I'd be careful about straying from Unicode fields. If you need a text column, use ntext. If you can get by with the varchar you still want to reexamine your row length, 6000 byte rows will really kill your page IO rates. Narrow columns and narrow tables give the best performance. Really depends on how and how often you will access it whether it is worth changing.

    Andy

  • Just to be clear, if I were to switch this 3000 character nvarchar to an ntext field, it would accomodate all the unicode BUT I couldn't do a text search on that field? This particular long field is one we'd never search on, so I'm thinking this may be our solution. However, it is included in several views and stored procedures. The other question is, can I just change the data type without losing anything that's already there? It appears that I've been able to do this in tests changing the nvarchar to a text field. Unless of course, I'm missing something.

    Dave Dufour

    http://www.du4.com/dave


    Dave Dufour
    http://www.du4.com/dave

  • You can change to text or ntext, the only time you "might" lose data is if you go from unicode to non-unicode. You can always use full text search if you need to search the text column.

    Andy

  • Many thanks for the assistance. This has helped greatly.

    Dave Dufour

    Dave Dufour

    http://www.du4.com/dave


    Dave Dufour
    http://www.du4.com/dave

Viewing 12 posts - 1 through 12 (of 12 total)

You must be logged in to reply to this topic. Login to reply