2

私は何日もこの質問に対する答えを見つけようとしていますが、それを得ることができないようです.

SQL Server 2012 に保存する必要がある Web サービスから取得した xml 文字列があります。

xml 文字列は最大 100k になる場合があります。

私は次の表を持っています

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[TempXML](
[id] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
[MyXML] [varbinary](max) NOT NULL,
CONSTRAINT [PK_TempXML] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,         ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[TempXML] ADD  CONSTRAINT [DF_TempXML_id]  DEFAULT (newid()) FOR [id]
GO

そして、次のストアドプロシージャ

CREATE PROCEDURE [dbo].[InsertXML] 
(   @xml xml)

AS  
BEGIN

SET NOCOUNT ON;
Insert into TempXML
values(NEWID(), @xml)
END 

データサイズが43752文字より大きい場合にsprocを呼び出すと、データが削除され、IDがインストールされます。

一方、フィールドが nvarchar(max) に設定されている場合、文字列全体がドロップされる前にアップロードできる最大値は 65535 文字です

c# メソッドから sproc を呼び出しています

internal static void InsertTempMovie(string xml)
{

{
        xmlSouce = xmlSouce.Replace("&", "&amp");
        xmlSouce = xmlSouce.Replace("'", "'");
        xmlSouce = xmlSouce.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<?xml version=\"1.0\" encoding=\"UTF-16\"?>");


        string xmlSouceEncoded = HttpUtility.HtmlDecode(xmlSouce);

        LinQTestDataContext dbTempXML = new LinQTestDataContext();
        dbTempXML .ExecuteCommand("exec InsertTempXML @xml={0}",xmlSouceEncoded);
    }
}

ただし、SQL Server 2012 Management Studio から直接呼び出しても同じ結果が得られます

文字列全体をドロップせずにアップロードできるというアイデアはありますか

前もって感謝します

4

1 に答える 1