|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
Моё почтение господа! Вот пример процедуры смысл которой весьма сомнителен, но тем не мене. CREATE PROCEDURE [dbo].[sp_tmp] as begin execute(N'select FNAME1,FNAME2 from TABLENAME1 ' N' where ' N' FNAME3 like ' + '''25%''' + N' or FNAME3 like ' + '''45%''' + N' or FNAME3 like ' + '''75%''' ) end go Если эту процедуру запустить на выполнение – она выполнится. Выполняю процедуру в SQL Advantage : exec sp_tmp Если процедуру модифицировать и добавить строки, например: N' or FNAME3 like ' + '''85%''' + N' or FNAME3 like ' + '''494%''' + И т.д. То может произойти так, что длина sql запроса превысит 255 символов, и при выполнении процедуры получим сообщение об ошибке: Character or binary data returned from Adaptive Server has been truncated. The client application does not support more than 255 bytes of data as a result column or output parameter. Помогите решить проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 15:26 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
golol_ol wrote: > Помогите решить проблему. А эта проблема не решается в принципе. Именно поэтому EXEC() -- это ацтой и мастдай. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 16:34 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
golol_ol, ну как вариант (по талантливости подстать смыслу процедуры): execute(N'select FNAME1,FNAME2 from TABLENAME1 ' N' where ' N' FNAME3 like ' + '''25%''' + N' or FNAME3 like ' + '''45%''' + N' or FNAME3 like ' + '''75%''' ) left(FNAME3,2) in ('25','45','75') либо занести значения в таблицу и left(FNAME3,2) not in (select ... from #table) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 16:36 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
Господа, тот sql запрос который я написал - надуманный. Просто он наглядный. Мне необходимо исполнить в хранимой процедуре запрос длиной больше чем 255 символов. Вот и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 16:47 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
golol_olГоспода, тот sql запрос который я написал - надуманный. Просто он наглядный. Мне необходимо исполнить в хранимой процедуре запрос длиной больше чем 255 символов. Вот и всё. а так сработает? Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 16:58 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
golol_ol, А с чего вы взяли что будет ошибка? Если меня не подводят знания анг.языка, то There are no restrictions to the number of characters supplied with the literal string ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 17:03 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
Конечно нет komrad , ведь DECLARE @cmd VARCHAR(255) Это означает, что длина переменной не может быть больше 255 символов. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 17:04 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
golol_olКонечно нет komrad , ведь DECLARE @cmd VARCHAR(255) Это означает, что длина переменной не может быть больше 255 символов. и? я же предложил склеить внутри экзека таким образом проверим что ограничение именно на суммарную длину строки внутри execute у меня к сожалению нет под рукой Sybase ASE для проверки ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 17:11 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
golol_ol wrote: > Автор: "golol_ol" > Конечно нет *komrad*, ведь > *DECLARE* @cmd VARCHAR(255) > > Это означает, что длина переменной не может быть больше 255 символов. в 12.5 -- не может быть более 16384 символов. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 17:26 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
MasterZiv, проверил. Выводится переменная длиной в 255. Exec не выполнял, завтра проверю, но шансы не большие. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2010, 18:15 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
MasterZiv, Доброго времени суток, уважаемый MasterZiv. А, что не отстой? Если у Вас есть рецепт преодоления проблемы связанной с длиной sql-запроса в хранимой процедуре, то может быть подскажете как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2011, 10:54 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
golol_ol, рецепта нет, и не только у меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2011, 11:39 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
MasterZiv, Спасибо, дружище!! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2011, 12:10 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
On 14.02.2011 12:10, golol_ol wrote: А ну кстати есть небольшой хак, который делает всё немного легче (но не до конца). Можно делать так (ограничение -- порядка 16000): Код: plaintext 1. 2. 3.
А можно делать и так (ограничение больше): Код: plaintext 1.
Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2011, 12:59 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
MasterZivOn 14.02.2011 12:10, golol_ol wrote: А ну кстати есть небольшой хак, который делает всё немного легче (но не до конца). Можно делать так (ограничение -- порядка 16000): Код: plaintext 1. 2. 3.
а если сделать так: declare @sql varchar(16000) select @sql = 'select 1,2,3,4,5, ... 9999, 10000' select @sql as sql -- exec ( @sql ) то получим обрезку sql --- select 1,2,3,4,5,... Строка изображённая красным цветом имеет длину 255 символов, т.е автор9999, 10000 просто не войдут. Вот в чём прискорбный финт. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2011, 17:38 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
golol_ol, Для ASE12.5 и далее "set stringsize nnnnn" спасает отца русской демократии. Правда, только до 16384 символов. Кроме того, возможна еще обрезка на клиенте, если он собран со старыми библиотеками, я с таким сталкивался. Вот такая процедура выдает в isql больше 256 символов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2011, 22:29 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
golol_ol, Еще один момент - если этому @sql попробовать exec сделать, IMHO будут проблемы из-за количества колонок в запросе (я не помню, какой там лимит, но он есть). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2011, 22:33 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
On 14.02.2011 22:29, invariant wrote: > Кроме того, возможна еще обрезка на клиенте, если он собран со старыми > библиотеками, я с таким сталкивался. Это очень навряд ли. Если varchar(255) приходит клиенту, он имеет тип CS_CHAR, а если скажем varchar(257) -- уже тип другой, CS_LONGCHAR. Так что старое ПО, непеределанное под 12.5 open client, просто НЕ ПОЛУЧИТ такую колонку. Правда, это всё относится к супервылизанному Open Client, а есть ещё куча клиентских библиотек, и ODBC, и JDBC. Про них ничего не могу сказать, могут и глючить. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2011, 10:58 |
|
Ограничение sql запроса (по длине) в процедуре. (Sybase 12.5 Window 2000)
|
|||
---|---|---|---|
#18+
invariantgolol_ol, Для ASE12.5 и далее "set stringsize nnnnn" спасает отца русской демократии. Правда, только до 16384 символов. Кроме того, возможна еще обрезка на клиенте, если он собран со старыми библиотеками, я с таким сталкивался. Вот такая процедура выдает в isql больше 256 символов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
set stringsize n Это не то : http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc32702_1250/html/omni_ug/omni_ug124.htm @@stringsize indicates the amount of character data to be returned from a toString() method. It is similar in behavior to @@textsize, except it applies only the char data returned by the Java Object.toString() method. The default will value is 50. The max value is 16384. A value of zero means “use the default.” This value can be modified by a new set command: set stringsize n ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 15:23 |
|
|
start [/forum/topic.php?desktop=1&fid=55&tid=2010391]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 162ms |
0 / 0 |