MS SQL不允许VARCHAR超过128个字符,为什么?

cjm*_*ria 1 sql sql-server

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

INSERT INTO TABLE_NAME VALUES (value1, value2...)
Run Code Online (Sandbox Code Playgroud)

Sql-server卡在我试图分配给nvarchar返回的数据类型列的180个字符的字符串上:

错误:以[部分字符串]开头的标识符太长.最大长度为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)
    )
Run Code Online (Sandbox Code Playgroud)

我的实际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
    )
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 5

默认情况下,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)
Run Code Online (Sandbox Code Playgroud)

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

另外,如上所述,您需要修复表定义,因为它们目前的nvarchar含义与之相同nvarchar(1).