sql - MS SQL 不允许 VARCHAR 超过 128 个字符,为什么?
问题描述
我有一个表,其中有一列配置为保存nvarchar
数据类型。我正在尝试使用添加一行
INSERT INTO TABLE_NAME VALUES (value1, value2...)
nvarchar
Sql-server 卡在我试图分配给返回的数据类型列的 180 个字符串上:
错误:以 [part of string] 开头的标识符太长。最大长度为 128。
我不明白为什么会发生这种情况,因为我在这里读到的 nvarchar(max) 应该拥有 2GByte 的存储空间:NVARCHAR(MAX) 的最大字符数是多少?
关于我在这里做错了什么的任何想法?
更新:
该表是用这个创建的:
CREATE TABLE MED_DATA (
MED_DATA_ID INT
,ORDER_ID INT
,GUID NVARCHAR
,INPUT_TXT NVARCHAR
,STATUS_CDE CHAR
,CRTE_DTM DATETIME
,MOD_AT_DTM DATETIME
,CHG_IN_REC_IND CHAR
,PRIMARY KEY (MED_DATA_ID)
)
而我实际的 INSERT 语句如下:
INSERT INTO MED_DATA
VALUES (
5
,12
,"8fd9924"
,"{'firstName':'Foo','lastName':'Bar','guid':'8fd9924','weightChanged':false,'gender':'Male','heightFeet':9,'heightInches':9,'weightPounds':999}"
,"PENDING"
,"2017-09-02 00:00:00.000"
,"2017-09-02 00:00:00.000"
,NULL
)
解决方案
默认情况下,T-SQL 中的双引号不分隔字符串。它们划定一个标识符。所以你不能在这里使用双引号。您可以更改默认值,但不应该。
如果这是直接在查询窗口中写入的,请对字符串使用单引号,然后在字符串中加双引号以转义它们:
INSERT INTO MED_DATA VALUES (5, 12, '8fd9924', '{''firstName'':''Foo'',''lastName'':''Bar'',''guid'':''8fd9924'',''weightChanged'':false,''gender'':''Male'',''heightFeet'':9,''heightInches'':9,''weightPounds'':999}', 'PENDING', '2017-09-02T00:00:00.000', '2017-09-02T00:00:00.000', NULL)
但是,如果您是从另一个程序传递这个字符串,那么是时候学习如何使用参数化查询了。这也将允许您将日期作为日期传递,而不是依赖字符串解析来正确重建它们。
此外,如前所述,您需要修复表定义,因为它们当前nvarchar
与nvarchar(1)
.
推荐阅读
- javascript - mqtt.Client(streamBuilder, options) 在 nodejs 中使用 mqtt 的示例
- python - 仅将数据帧的一个子集附加到另一个数据帧
- rust - Rust async-std 奇怪的语法为了解决读写借用的冲突
- java - 将值设置为 Java 15 记录中的属性之一
- pandas - 数据框中下 x 行的频率
- http - HTTP/3 如何处理丢包?
- javascript - 为什么离线二维码脚本不适用于表情符号?
- c# - 如何从 IReadOnlyList 中查找项目
? - sql - Oracle SQL PIVOT“列定义不明确”
- javascript - D3根据日期计算x位置