几天来我一直试图找到这个问题的答案,但似乎无法得到它。
我有一个从 Web 服务获得的 xml 字符串,我需要将其存储在我的 sql server 2012 中。
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 char
我正在从 c# 方法调用存储过程
internal static void InsertTempMovie(string xml)
{
{
xmlSouce = xmlSouce.Replace("&", "&");
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 调用,我也会得到相同的结果
关于我可以上传整个字符串而不被丢弃的任何想法
先感谢您