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

时间:2018-07-23 06:05:17

标签: sql sql-server

我有一个表,该表的列配置为保存sudo apt install libssl-dev 数据类型。 我正在尝试使用

添加一行
nvarchar

SQL服务器卡在我要分配给返回的INSERT INTO TABLE_NAME VALUES (value1, value2...) 数据类型列的180个字符串上:

  

错误:以[字符串的一部分]开头的标识符太长。   最大长度为128。

我不明白为什么会这样,因为我在这里读到What is the maximum characters for the NVARCHAR(MAX)?

时,nvarchar(max)应该拥有2GB的存储空间

我对这里的问题有何想法?

更新:

使用以下命令创建表:

nvarchar

我的实际INSERT语句如下:

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

2 个答案:

答案 0 :(得分:5)

默认情况下,T-SQL中的双引号不分隔字符串。 They delimit an identifier。因此,您不能在此处使用双引号。您可以更改默认的,但不能

如果这是直接在查询窗口中编写的,请对字符串使用单引号,然后对字符串中的双引号进行转义以将其转义:

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)

但是,相反,如果您要从另一个程序传递此字符串,那么该是时候学习如何使用参数化查询了。这还使您可以将日期跨传递为日期,而不必依靠字符串解析来正确地重建它们。

另外,如前所述,您需要fix your table definitions,因为它们当前为nvarchar,这与nvarchar(1)相同。

答案 1 :(得分:1)

您是否知道标识符是什么?这里有个提示-它是一个名字。 SQL Server不是在抱怨您的数据,而是在抱怨字段或表名。因此,必须完全使您的SQL混乱,以便将文本的一部分解析为字段或表的名称。是的,这些字符限制为128个字符。

这在错误消息中很明显:

  

错误:标识符

明确指出这是一个标识符问题。