2013-10-26 230 views
8

我之前在Yii Framework中使用MS SQL Server 2005,并在那里创建表和存储过程。但现在我把我的数据库转移到MS SQL Server 2008 R2,当我试图保存长长的字符串,然后它给了我最大长度的错误,而我已经设置该列的数据类型为“文本”之后,我取而代之的是“varchar(max)”,但没有解决方案。以......开头的标识符太长。最大长度为128

请给我一个解决方案如何解决这个问题。我正在执行以下查询:

update hotel 
set hotel_policy = 
    "Overview of Park Central New York - New York 
    This hotel is making improvements. 
     The property is undergoing renovations. The following areas are affected: 
     Bar/lounge 
     Business center 
     Select guestrooms 

    Every effort will be made to minimize noise and disturbance. 
    Occupying a Beaux Arts building dating to 1927, Park Central New York Hotel is within a block of famed concert venue Carnegie Hall and within a 5-minute walk of Manhattan’s world-renowned Broadway theater district. Prefer the great outdoors to the Great White Way? Central Park is just 3 blocks from the hotel. There, you can rent a rowboat at the lake, play a game of tennis, or visit the Central Park Zoo. The international boutiques and flagship department stores of Fifth Avenue start within a 10-minute walk of the hotel. For travel to sights farther afield, there are 7 subway lines located within 3 blocks of the Park Central. 
    The hotel has a snack bar for guests' convenience, and coffee and tea in the lobby. 
    Retreat to your guestroom and sink into a bed with a pillowtop mattress and down comforter and pillows. Need to check email or finish up some work? You’ll find a desk with an ergonomic chair and wireless high-speed Internet access (surcharge). Unwind with a video game (surcharge) on the flat-panel HDTV." 

where hotel_id = 1 

我搜索了很多,但我找到的C#解决方案对我无用。

谢谢!

回答

15

根据ANSI SQL标准,双引号被使用(如果必要)为对象标识符(例如:UPDATE "hotel" ...),而不是作为字符串分隔符("Overview of Park Central ...")。SQL Server有这种行为时QUOTED_IDENTIFIERON

编辑1: 单和双引号,作为分隔符的对象标识符(包括列别名)的用法如下所述:

     Delimiter Delimiter 
         for   for 
SET QUOTED_IDENTIFIER Object ID Alias ID  StringDelimiter 
ON      " or []  " or ' or [] ' 
OFF      []   " or ' or [] " or ' 
  • ON然后双引号可用作对象标识符(包括列别名)的分隔符,单引号用作字符串文字和/或列别名(SELECT Column1 AS 'Alias1' ....)标识符的分隔符。
  • OFF然后双引号可用作列别名(SELECT Column1 AS "Alias1" ...)的分隔符和字符串文本的分隔符(SELECT "String1" AS Alias1 ...)。单引号可以用作字符串分隔符和列别名的分隔符(SELECT Column1 AS Alias1 ...)。

使用,而不是单引号:

update hotel 
set hotel_policy = 'Overview of Park Central ...' 
where hotel_id = 1 
3

如果你不想改变双引号单引号加在之后的脚本

SET QUOTED_IDENTIFIER OFF 
SET ANSI_NULLS ON 
+0

没有乞讨两条线,即并不能解决问题。 – Zerubbabel