我正在使用nhibernate为SQL Server Compact Edition表中的应用程序存储一些用户设置.
这是映射文件的摘录:
<property name="Name" type="string" />
<property name="Value" type="string" />
Run Code Online (Sandbox Code Playgroud)
Name是常规字符串/ nvarchar(50),Value在DB中设置为ntext
我正在尝试将大量xml写入"Value"属性.我每次都得到一个例外:
@p1 : String truncation: max=4000, len=35287, value='<lots of xml..../>'
Run Code Online (Sandbox Code Playgroud)
我用Google搜索了一下,并尝试了许多不同的映射配置:
<property name="Name" type="string" />
<property name="Value" type="string" >
<column name="Value" sql-type="StringClob" />
</property>
Run Code Online (Sandbox Code Playgroud)
这是一个例子.其他配置包括"ntext"而不是"StringClob".那些不抛出映射异常的配置仍会抛出字符串截断异常.
这是SQL CE的问题("功能")吗?是否可以使用nhibernate将超过4000个字符放入SQL CE数据库?如果是这样,谁能告诉我怎么样?
非常感谢!
如何替换sql server 2000中ntext列中超过4000个字符的文本?转换为 nvarchar(max) 不起作用,因为它会截断值。
我有一个关于perl DBI的bind_param的问题.以下SQL工作原理:
my $sth = $dbh->prepare("SELECT id FROM table WHERE id = 'string'");
$sth->execute();
Run Code Online (Sandbox Code Playgroud)
虽然以下不是:
my $sth = $dbh->prepare("SELECT id FROM table WHERE id = ?");
$sth->execute('string');
Run Code Online (Sandbox Code Playgroud)
上次查询导致的错误是[ODBC SQL Server Driver][SQL Server]The data types nvarchar(max) and ntext are incompatible in the equal to operator. (SQL-42000)
.
似乎是bind_param
,被调用execute
,将'string'强制转换为ntext.我该如何解决这个问题?
我正在使用实体框架,并编写此代码以从数据库获取一些结果:
ReviewsDBEntities DB = new ReviewsDBEntities();
var result=DB.Review.Where(r => r.ReviewText.Length > 200);
Run Code Online (Sandbox Code Playgroud)
但我收到此错误作为内部错误:“参数数据类型 ntext 对于 len 函数的参数 1 无效”
我查了一下,发现由于ReviewText的类型被定义为ntext,函数Len不会在数据库端运行它。现在,我不知道如何更改代码以获取长度超过 200 的 ReviewTexts。
我正在使用SQL Server 2005.在其中一个表中,我有一个"xmldefinition"列,它是ntext类型.现在,此列中的数据非常庞大,并包含整个xml文本.
例如:- <root><something1>....</something1></root>
我想从管理工作室获取整个字符串并将其复制到xml文件中,只是为了手动完成整个xml.但是当我查询此列并将数据复制并粘贴到另一个文件中时,内容在中间被破坏并且不完整.
例如:- <root><something1>........<somechar
我相信这只会从列中的xml数据中复制一些8196个字符.所以我的问题是,如何手动获取此列的完整数据.但是,我可以编写一个C#代码来读取该列,但我想在管理工作室中手动执行此操作.请问任何想法.
其中一列使用ntext.我想将换行符和回车符替换为空格,但我一次只能做一个.有没有一种方法可以使用CHAR(10)
,CHAR(13)
同时在SQL Server 2012上使用下面的脚本?
REPLACE(CAST(Description as NVARCHAR(MAX)), CHAR(10), ' ') AS Description
Run Code Online (Sandbox Code Playgroud) 这一个匹配 column_name like 'CharEndsHere%'
和
这个没有 column_name like 'CharEndsHere'
我知道像操作符一样会考虑尾随空格,所以我只是复制了精确的列值(带有尾随空格)并粘贴它.
有点像column_name like 'CharEndsHere '
它不匹配 - 为什么?.
我没有使用'='
运算符,因为列类型是ntext
我在这里缺少什么或者不应该like
以这种方式使用运算符吗?
编辑:column_name like 'CharEndsHere__'
(__表示空格)'CharEndsHere '
是该单元格中的确切值,like
以这种方式使用有效还是无效?
编辑:
这是我试过的代码,
SELECT *
FROM [DBName].[dbo].[TableName]
WHERE [DBName].[dbo].[TableName].Address1 LIKE rtrim('4379 Susquehanna Trail S ')
Run Code Online (Sandbox Code Playgroud)
我也试过没有使用rtrim
,但结果相同
编辑:根据Blindy的回答,
If a comparison in a query is to return all rows with the string LIKE 'abc' (abc
without a space), all rows that start …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在列数据类型为 的表中插入数据NTEXT
。理想情况下,它应该存储超过 8000 个字符,但在我的情况下,它将它减少到 8000 个字符。
我正在程序中在运行时进行插入查询。下面是该过程正在进行的示例查询。
INSERT INTO TMPRESULTS SELECT ('A' + ',' + 'B' + ',' + 'C')
Run Code Online (Sandbox Code Playgroud)
A、B、C 等是示例数据,实际数据将在运行时识别,实际内容超过 8000 个字符。用于存储值的变量也定义为 ' NVARCHAR(MAX)
'
但是,当我尝试以下查询时,它确实在表中插入了 8000 多个字符
INSERT INTO TMPRESULTS SELECT ('ABCdddd................')
Run Code Online (Sandbox Code Playgroud)
我认为当我试图用“+”号连接数据时,sql server 正在将长度减少到 8000。我不能使用,CONCAT
因为数据将超过 256 列/参数。
任何想法,为什么要这样做?另外,如果有人可以帮助提供一些替代解决方案,因为我将不得不在运行时进行插入查询。