Здравствуйте, pkarklin, Вы писали:
P>Здравствуйте, Improved, Вы писали:
I>>Кто нибудь сталкивался с проблемой ограничения размера в 8000 байт у параметров ХП в SQL2005, как это лечится???
P>Нет такой проблемы ибо нет такого ограничения!
Тогда как обьяснить, то что при выполнении ХП написанной на CLR она возвращает ByteStream который длинной в 16000 происходит эксепшн:
Trying to convert return value or output parameter of size 16384 bytes to a T-SQL type with a smaller size limit of 8000 bytes. Тоже самое могу и сказать про nvarchar больше 8000 не берет. Зато вот XML любой длинны.
Re[3]: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, Improved, Вы писали:
I> Тоже самое могу и сказать про nvarchar больше 8000 не берет.
Потому что если хочется больше 8000, то надо использовать nvarchar(max)
... << RSDN@Home 1.2.0 alpha rev. 0>>
Мы уже победили, просто это еще не так заметно...
Re[4]: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, IB, Вы писали:
IB>Здравствуйте, Improved, Вы писали:
I>> Тоже самое могу и сказать про nvarchar больше 8000 не берет. IB>Потому что если хочется больше 8000, то надо использовать nvarchar(max)
Уже пробывал, на один символ в nvarchar уходит 2 байта при max получается 16000, все дальше no way. Мне непонятно почему XML я могу передать любого размера а все остальные типы ограничены.
Re[3]: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, Improved, Вы писали: I>Тогда как обьяснить, то что при выполнении ХП написанной на CLR она возвращает ByteStream который длинной в 16000 происходит эксепшн: I>Trying to convert return value or output parameter of size 16384 bytes to a T-SQL type with a smaller size limit of 8000 bytes. Тоже самое могу и сказать про nvarchar больше 8000 не берет. Зато вот XML любой длинны.
Поди текст како-нибудь передаете..., а приводите к nvarchar вместо того чтобы залить в CLR этот текст в параметр типа text.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, снежок, Вы писали:
С>Здравствуйте, Improved, Вы писали: I>>Тогда как обьяснить, то что при выполнении ХП написанной на CLR она возвращает ByteStream который длинной в 16000 происходит эксепшн: I>>Trying to convert return value or output parameter of size 16384 bytes to a T-SQL type with a smaller size limit of 8000 bytes. Тоже самое могу и сказать про nvarchar больше 8000 не берет. Зато вот XML любой длинны. С>Поди текст како-нибудь передаете..., а приводите к nvarchar вместо того чтобы залить в CLR этот текст в параметр типа text.
В том то и дело что не текст, а сериализованный обьект, просто уже пробывал по всякому, но он иногда бывает достаточно увесист.
Re[5]: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, Improved, Вы писали:
I>Уже пробывал, на один символ в nvarchar уходит 2 байта при max получается 16000, все дальше no way.
Значит что-то не так пробуешь...
I> Мне непонятно почему XML я могу передать любого размера а все остальные типы ограничены.
max ограничен 2-мя гигабайтами. Могут быть проблемы при передаче по сети, когда упираешься в размер пакета, но это порядка 50 мегабайт по умолчанию, других ограничений нет.
Мы уже победили, просто это еще не так заметно...
Re: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, Improved, Вы писали:
I>Кто нибудь сталкивался с проблемой ограничения размера в 8000 байт у параметров ХП в SQL2005, как это лечится???
Гм. Что я делаю неправильно?
USE [Test]
GO
/****** Object: Table [dbo].[LongTextTable] Script Date: 10/24/2006 12:57:27 ******/SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[LongTextTable](
[LongText] [nvarchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
using System;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
using (SqlConnection connection = new SqlConnection(@"Integrated Security=SSPI;SERVER=.\SQLEXPRESS;DATABASE=Test"))
{
connection.Open();
SqlTransaction transaction = connection.BeginTransaction();
SqlCommand insertCommand = connection.CreateCommand();
insertCommand.Transaction = transaction;
insertCommand.CommandType = CommandType.Text;
insertCommand.CommandText = "INSERT INTO [dbo].[LongTextTable] ([LongText]) VALUES (@LongText)";
insertCommand.Parameters.Add("@LongText", SqlDbType.NVarChar).Value = new string('ы', 100000);
insertCommand.ExecuteNonQuery();
SqlCommand selectComand = connection.CreateCommand();
selectComand.Transaction = transaction;
selectComand.CommandType = CommandType.Text;
selectComand.CommandText = "SELECT [LongText] FROM [dbo].[LongTextTable]";
using (SqlDataReader reader = selectComand.ExecuteReader())
{
while (reader.Read())
{
string longText = (string)reader["LongText"];
Console.WriteLine(longText.Length);
}
}
transaction.Rollback();
}
}
}
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, Improved, Вы писали:
I>Здравствуйте, IB, Вы писали:
IB>>Здравствуйте, Improved, Вы писали:
I>>> Тоже самое могу и сказать про nvarchar больше 8000 не берет. IB>>Потому что если хочется больше 8000, то надо использовать nvarchar(max)
I>Уже пробывал, на один символ в nvarchar уходит 2 байта при max получается 16000, все дальше no way. Мне непонятно почему XML я могу передать любого размера а все остальные типы ограничены.
Значит не правильно пробовали.
Из msdn:
nvarchar [ ( n | max ) ]
Variable-length Unicode character data. n can be a value from 1 through 4,000. max indicates that the maximum storage size is 2^31-1 bytes. The storage size, in bytes, is two times the number of characters entered + 2 bytes.
Re[2]: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, Lloyd, Вы писали:
L>Гм. Что я делаю неправильно?
Тут запись идет напрямую в таблицу, без использования ХП. Видимо вся беда в автоматическом приведении типов в CLR он как то тупо их конвертит из С# в его аналоги T — SQL других мыслей пока нет.
Re[3]: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, Improved, Вы писали:
I>Тут запись идет напрямую в таблицу, без использования ХП. Видимо вся беда в автоматическом приведении типов в CLR он как то тупо их конвертит из С# в его аналоги T — SQL других мыслей пока нет.
У меня все номально
USE [Test]
GO
/****** Object: StoredProcedure [dbo].[prLongTextTableIns] Script Date: 10/24/2006 14:00:26 ******/SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[prLongTextTableIns](@LongText NVARCHAR(MAX))
AS
INSERT INTO [dbo].[LongTextTable] ([LongText]) VALUES (@LongText)
using System;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
using (SqlConnection connection = new SqlConnection(@"Integrated Security=SSPI;SERVER=.\SQLEXPRESS;DATABASE=Test"))
{
connection.Open();
SqlTransaction transaction = connection.BeginTransaction();
SqlCommand insertCommand = connection.CreateCommand();
insertCommand.Transaction = transaction;
insertCommand.CommandType = CommandType.StoredProcedure;
insertCommand.CommandText = "prLongTextTableIns";
insertCommand.Parameters.Add("@LongText", SqlDbType.NVarChar).Value = new string('ы', 100000);
insertCommand.ExecuteNonQuery();
SqlCommand selectComand = connection.CreateCommand();
selectComand.Transaction = transaction;
selectComand.CommandType = CommandType.Text;
selectComand.CommandText = "SELECT [LongText] FROM [dbo].[LongTextTable]";
using (SqlDataReader reader = selectComand.ExecuteReader())
{
while (reader.Read())
{
string longText = (string)reader["LongText"];
Console.WriteLine(longText.Length);
}
}
transaction.Rollback();
}
}
}
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Обход ограничения на длину параметра в ХП на SQL2005
Здравствуйте, Improved, Вы писали:
I>Кто нибудь сталкивался с проблемой ограничения размера в 8000 байт у параметров ХП в SQL2005, как это лечится???
Что у меня неправильно??
//SQL Stored procedure
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void Test(out object outputstream)
{
SqlCommand cmd = new SqlCommand();
outputstream = null;
using (SqlConnection conn = new SqlConnection("context connection = true"))
{
cmd.Connection = conn;
conn.Open();
cmd.CommandText = "SELECT * FROM SYS.OBJECTS FOR XML AUTO";
string xml = String.Empty;
for (int i = 0; i < 20; i++)
xml += cmd.ExecuteScalar();
conn.Close();
outputstream = xml;
}
}
};