Overcome 8000 character varchar limit


Our ASP.Net/VB online application allows users to create a customized query to run against a SQL Server 2000 database. The query string is created by passing parameters to a sproc which then assembles the query string and runs it.

When the user selects very many fields for return, this limit is exceeded, and one of the parameters passed from ASP.Net is truncated. Therefore the query string is not constructed and the query can't run.

This can't be the first time this has ever happened, so... what datatype can I use to pass a value when it exceeds 8000 characters? Text? User-defined data type? If so, how?

Thanks
LVL 1
k3n51mmAsked:
Who is Participating?
 
ShogunWadeConnect With a Mentor Commented:
if the requirement is to simply execute a dynamic sql string bigger than 8000 chars take a look at

xp_exec resultset

its undocumented but this is basically how it works....

2 parameters 1) a query which returns aSQL statement  and 2nd a DB name to run it on.

eg:


xp_execresultset 'SELECT MyQuery FROM MyTable','MyDb'

the result of 'SELECT MyQuery FROM MyTable'  would form the query to execute on MyDb



0
 
AustinSevenCommented:
text/ntext is the only option I can think of.

AustinSeven
0
 
k3n51mmAuthor Commented:
Well, that's nice.

How do I do it?  What I mean is, okay, so I change the datatype to text in ASP.Net. Then when I pass it to SQL Server, I have a text parameter that is holding data that I have to use in a query. How do I manipulate the text so I can use it? This query has to be dynamically created on the SQL server and then executed. Can I simply insert the test into the query string? I've been told this is not possible.
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
arbertCommented:
Just pass multiple varchar(8000) and concat them together when you do the query string....
0
 
k3n51mmAuthor Commented:

That means dynamically adding parameters in 12 different places in the ASP code and seems too complex and inelegant. Since this is a database issue, should we really be fixing it in the business logic? Isn't there any way the SQL Server can handle this?
0
 
Anthony PerkinsCommented:
>>Since this is a database issue, should we really be fixing it in the business logic? <<
Correct. This is a design issue, there very rarely is a need to do this: "The query string is created by passing parameters to a sproc which then assembles the query string and runs it."

>>Isn't there any way the SQL Server can handle this?<<
Other than what arbert has suggested, not really.
0
 
Anthony PerkinsCommented:
Try posting your query and we may be able to give you more intelligent answers.
0
 
arbertCommented:
"That means dynamically adding parameters in 12 different places in the ASP code and seems too complex and inelegant. Since this is a database issue, should we really be fixing it in the business logic? Isn't there any way the SQL Server can handle this?"

This isn't a database issue--this is a design issue--you should have known the limitations when the application was coded and coded appropriately....

0
 
ShogunWadeCommented:
example:



create table b(a varchar(8000),i int)
go

insert b values ('select *',1)
insert b values ('from sysobjects',2)


master.dbo.xp_execresultset 'Select a from b order by i','pubs'

0
 
ShogunWadeCommented:
using this you can "theortically" issue a command on upto 16Tb large    :)
0
 
arbertCommented:
Not quite--it would still fall under the "Maximum Capacity Specifications" in books online....
0
 
ShogunWadeCommented:
indeed, quite correct arbert.

PS. i should have stressed in capitals the UNDOCUMENTED word.  
0
 
ShogunWadeCommented:
256 Meg based on default 4K packet size.   I suspect if you need a query that's bigger than that then you have bigger issues than query size ;)
0
 
k3n51mmAuthor Commented:

>>This isn't a database issue--this is a design issue--you should have known the limitations when the application was coded and coded appropriately....<<

How to lose points and influence people.



>>xp_execresultset 'SELECT MyQuery FROM MyTable','MyDb'<<

How to answer the frickin' question.

Thank you all
0
 
ShogunWadeCommented:
glad i could help k3.
0
 
arbertCommented:
"How to lose points and influence people."

You also shouldn't post in the database area and post flat out that it's a database issue/problem...and you never did post your query or what you were trying to do like acperkins requested above--there are documented workarounds that you can use.....
0
 
Anthony PerkinsCommented:
>>How to lose points and influence people.<<
Please take the time to re-read the EE Guidelines.  Specifically this: "Remember, the Expert helping you today is probably going to be helping you next time you post a question."

See you next time ...
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.