首页 > 解决方案 > MS SQL 不允许 VARCHAR 超过 128 个字符,为什么?

问题描述

我有一个表,其中有一列配置为保存nvarchar数据类型。我正在尝试使用添加一行

INSERT INTO TABLE_NAME VALUES (value1, value2...)

nvarcharSql-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
    )

标签: sqlsql-server

解决方案


默认情况下,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)

但是,如果您是从另一个程序传递这个字符串,那么是时候学习如何使用参数化查询了。这也将允许您将日期作为日期传递,而不是依赖字符串解析来正确重建它们。

此外,如前所述,您需要修复表定义,因为它们当前nvarcharnvarchar(1).


推荐阅读