作者:蓝客杂货 | 来源:互联网 | 2022-12-09 19:57
我有一个表,其列配置为保存nvarchar
数据类型.我正在尝试使用添加行
INSERT INTO TABLE_NAME VALUES (value1, value2...)
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)
)
我的实际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
)
Damien_The_U..
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)
但是,如果你将这个字符串传递给另一个程序,那么就该学习如何使用参数化查询了.这也允许您将日期作为日期传递,而不是依赖于字符串解析来正确地重建它们.
另外,如上所述,您需要修复表定义,因为它们目前的nvarchar
含义与之相同nvarchar(1)
.
1> Damien_The_U..:
默认情况下,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)
.