问题标签 [varcharmax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - RTRIM 未按预期工作
我面临一个奇怪的问题,我使用了数千次的 RTRIM 没有按预期工作。几乎就像末尾的字符看起来像空格,但 SQL 2008 并没有将它们视为空格,因此末尾的“空格”不会被删除。“空格”的数量每行不同。有人有任何想法或遇到过这个吗?
下面的光标选择记录,同时将内容转换为 varchar(max)。然后它应该根据内容键更新记录,同时刮掉尾随字符并将其转换为 varbinary(max)。这是我的光标:
更新:
来自 digitalassetcontent.conent 的示例:0x457874656368203430304120414320636C616D70206D657465722C2041432063757272656E74206D6F64656C20746F206D65657420796F7572206170706C69636174696F6E206E656564732E20203230303020636F756E74204C434420646973706C61792E20204869676820616363757261637920666F722063757272656E74206D6561737572656D656E74732E2020302E3922202832336D6D29206A61772073697A65206163636F6D6D6F646174657320636F6E647563746F727320757020746F203330304D434D2E2020436F6E74696E756974792062656570657220616E642064696F646520746573742E20204461746120686F6C6420616E64206D617820686F6C642E20204F7665726C6F61642070726F74656374696F6E20666F7220616C6C2072616E6765732E20204F76657272616E676520616E64206C6F77206261747465727920696E64696361746F72732E20204175746F72616E67696E672077697468206175746F20706F776572206F66662E0D0A090909090909090909090D0A090909090909090909090D0A090909090909090909090D0A090909090909090909090x457874656368203430304120414320636C616D70206D657465722C2041432063757272656E74206D6F64656C20746F206D65657420796F7572206170706C69636174696F6E206E656564732E20203230303020636F756E74204C434420646973706C61792E20204869676820616363757261637920666F722063757272656E74206D6561737572656D656E74732E2020302E3922202832336D6D29206A61772073697A65206163636F6D6D6F646174657320636F6E647563746F727320757020746F203330304D434D2E2020436F6E74696E756974792062656570657220616E642064696F646520746573742E20204461746120686F6C6420616E64206D617820686F6C642E20204F7665726C6F61642070726F74656374696F6E20666F7220616C6C2072616E6765732E20204F76657272616E676520616E64206C6F77206261747465727920696E64696361746F72732E20204175746F72616E67696E672077697468206175746F20706F776572206F66662E0D0A090909090909090909090D0A090909090909090909090D0A090909090909090909090D0A090909090909090909090x457874656368203430304120414320636C616D70206D657465722C2041432063757272656E74206D6F64656C20746F206D65657420796F7572206170706C69636174696F6E206E656564732E20203230303020636F756E74204C434420646973706C61792E20204869676820616363757261637920666F722063757272656E74206D6561737572656D656E74732E2020302E3922202832336D6D29206A61772073697A65206163636F6D6D6F646174657320636F6E647563746F727320757020746F203330304D434D2E2020436F6E74696E756974792062656570657220616E642064696F646520746573742E20204461746120686F6C6420616E64206D617820686F6C642E20204F7665726C6F61642070726F74656374696F6E20666F7220616C6C2072616E6765732E20204F76657272616E676520616E64206C6F77206261747465727920696E64696361746F72732E20204175746F72616E67696E672077697468206175746F20706F776572206F66662E0D0A090909090909090909090D0A090909090909090909090D0A090909090909090909090D0A09090909090909090909
ruby - Windows 上的 Ruby 2.0 连接到 MS SQL varchar(max) 截断为 2048
背景:我编写了一些 ruby 转换脚本,他们从 MS SQL 获取数据转换它们,然后将其存储回数据库我正在使用可在 freetds 上运行的微型 tds gem
--问题:对于 sql 中 varchar max 且字符串长度大于 2048 的列,当使用小 tds 提取数据时,这些列会被截断为 2048 长度。
Freetds 协议 7.2 确实解决了这个问题,但在 windows 平台上不可用,代码在 mac 上完美运行。但由于与 ETL 工具的集成,我必须将其部署在 Windows 机器上。
- 有没有人对此有解决方案。
sql - 包含 varchar(max) 的 SQL 查询使用 ORDER BY 非常慢
具有 20 列(ints、bools 和 varchar(50)'s)的表检索速度非常慢,因为一列的类型为 varchar(max)。
该表有 680 行,我正在检索最多 5 或 6 个结果。
由于某种原因,如果结果包含类型为 varchar(MAX) 的列,则 select 语句会非常慢。
供参考; 我们已经使用脚本文件将表的内容(模式和数据)从一台服务器移动到另一台服务器。
知道这是怎么可能的吗?
// 插入更多信息。好的,情节变厚了。
创建了索引,但它并没有带来任何(明显的)性能提升。
我现在在更多的数据库(同一台服务器)上得到它。从探查器中获取以下查询(来自实体框架的查询):
这有时会增加加载时间。无论记录多少,加载时间总是增加大约 16-18 秒。
完整的 sql server 不处理任何请求(对其他数据库也是),因此它会导致所有站点阻塞并等待此操作完成,然后继续。
几乎就像每次请求都会填满内存一样!
服务器规格足够公平;webserver 8gigs ram,sql也一样。目前在 IIS7 上托管大约 20 个站点(所有 .net MVC 都使用 EF 5)
tsql - varchar(max):如何控制“行内”数据的长度
我一直在读这样的东西:
在 SQL Server 的未来版本中将删除 text in row 选项。避免在新的开发工作中使用此选项,并计划修改当前使用行中文本的应用程序。我们建议您使用 varchar(max)、nvarchar(max) 或 varbinary(max) 数据类型来存储大数据。要控制这些数据类型的行内和行外行为,请使用大值类型行外选项。
那么,如果我们有一个 varchar(max) 字段希望限制为 16 个字符,我们应该怎么做呢?
谢谢!
编辑。 当我说“行内”时,我的意思是 VARCHAR/TEXT 字符串直接存储在数据行中,而不是作为指针(字符串数据存储在其他地方)。如果将数据移出行将提高表扫描性能移出行的数据不是“where”子句的一部分。
编辑。 我引用的文字是这样说的:
要控制这些数据类型的行内和行外行为,请使用大值类型行外选项。
果然:
https://msdn.microsoft.com/en-us/library/ms173530.aspx
但在那一页上它说:
在 SQL Server 的未来版本中将删除行中文本功能。要存储大值数据,我们建议您使用 varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型。
所以问题仍然存在。
编辑。 看来我们仍然可以使用此表选项:
大值类型超出行列。值 1 表示表中的 varbinary(max)、xml 和大型用户定义类型 (UDT) 列存储在行外,并带有指向根的 16 字节指针。值 0 表示 varchar(max)、nvarchar(max)、varbinary(max)、xml 和大 UDT 值直接存储在数据行中,最大限制为 8000 字节,只要该值适合记录。如果该值不适合记录,则将指针存储在行内,其余的将存储在 LOB 存储空间中的行外。0 是默认值。
但是,我们似乎失去了在数据较小时将数据保留在行中的选项。要么全进要么全出。有没有其他方法可以做到这一点?
sql-server - SSIS - varchar(最大值)
我有 sp 连接一个长字符串并传回 SSIS。但目前 SSIS 只选择部分字符串。
是否有一种方法允许 T-SQL 存储过程将长字符串传递给 SSIS ?目前该参数定义为VARCHAR(max)
我尝试使用 SSIS 对象变量,但它不允许我将其转换回字符串。如何将 SSIS 对象转换为字符串
我正在使用 SSIS 2012。
谢谢
sql-server - 什么特殊字符更适合文本搜索?
我正在使用 Sql Server 2014 Express 并且有一个 varchar(max) 列。在某些情况下,我需要使用特殊字符来为该字段赋予特殊含义。
例如,我有这个值:“123.456.234”,但我想使用类似的值:“678.*789.123”。在第二种情况下, * 表示值 789 不是标准值(我的应用程序逻辑中的标准值),而其他两个值 678 和 123 是标准值。
但是我不知道当我想在查询中使用此列进行搜索时,是否使用“*”会遇到问题。我可以使用任何字符,我只想分隔字符串中特定值的含义。
非常感谢。
sql-server - T-SQL 代码中 varchar(max) 的效率
(n)varchar(max)
我对(n)varchar(<explicit-size>)
T-SQL 代码(存储过程、函数)的“效率”(速度、内存使用)有疑问。我不是在询问它在列定义中的用法。
在现有代码中,我注意到很多类似的情况,比如:
要点是(以上只是一个例子)我最终会从有限大小的字符串列中构建更长的字符串。很难/不方便知道和维护这些字符串可能会变得多大。
因此,如果我改为将这些 T-SQL 变量声明为nvarchar(max)
. 然后我不必担心它们可以达到的最大尺寸。它们类似于编程语言的“无限”字符串大小。
有人知道 SQL Server 如何“有效”地处理操作声明的变量的代码(n)varchar(max)
吗?例如,它是否为这样的变量保留了大量空间(我希望它纯粹动态地处理它),或者CAST/CONVERT()
使用它的字符串函数是否会受到一些性能损失?[如果相关,我必须支持 SQL Server 2008 R2 及更高版本。]
[编辑:有人建议我的问题与总是使用 nvarchar(MAX) 有什么缺点吗?. 但是,除一篇文章外,其他所有文章都varchar(max)
在列定义中引用,我的问题明确指出我正在询问T-SQL 代码(变量等)的性能。我在下面的问题上发布了一个答案(因为它很大),它借鉴了该帖子并用一些新信息对其进行了扩展。]
sql - T-SQL 中的智能 CONVERT 浮点数到 VARCHAR
我有以下代码
但结果213456790
是213456789.55
当我尝试写CONVERT(VARCHAR,213456789.55,1)
它然后返回213456789.55
不213456790
我该如何解决这个问题?
编辑
像下面这样将@m 声明为十进制DECLARE @m DECIMAL(18,2)=213456789.55
解决了这个问题,但我想知道是否有另一种使用浮点数的解决方案。谢谢
stored-procedures - 数据类型 0x23 是不推荐使用的大对象或 LOB,但被标记为输出参数
我正在尝试从 an接收varchar(max)
输出,但出现上述错误,即当我执行inparam
stored procedure
Data type 0x23 is a deprecated large object, or LOB, but is marked as output parameter
SP
vb.net
我试过使用SQLNCLI11
连接字符串,没有运气我试过设置Datatypecompatibility=80
,没有运气
提前致谢。
这是我的代码:
sql - SQL 数据类型 Varchar(max) 与 Varchar(8000)
我的理解:如果我用 Varchar(100) 定义一个列,然后只存储 40 个字节,那么 SQL 将只为该单元分配 40 个字节。我想知道的是:现在,如果我将所有单元格定义为 Varchar(8000) 那么问题是什么?为什么我什至应该使用 Varchar(100) 或 Varchar(除 8000 之外的任何其他内容)?
另外,为什么不使用 Varchar(max) 而不是 varchar(8000) 因为我理解 8000 是最大值。