字符串或二进制数据将被截断=>脚本中的列名称

时间:2013-07-05 12:30:32

标签: sql asp.net-mvc entity-framework

我有这个包含这些列的表:

CREATE TABLE CARD
(
    CARD_IDE INT NOT NULL IDENTITY,
    CARD_NAME VARCHAR(50) NOT NULL,
    CARD_NUMBER NUMERIC(4) NOT NULL,
    CARD_COLOR VARCHAR(10),
    CARD_MANA_COST VARCHAR(30),
    CARD_MANA_CONVT VARCHAR(3),
    CARD_TYPE VARCHAR(50),
    CARD_POWER VARCHAR(2),
    CARD_TOUGH VARCHAR(2),
    CARD_RARTY VARCHAR(1) NOT NULL,
    CARD_TEXT_ABILT VARCHAR(800),
    CARD_TEXT_FLAVR VARCHAR(800),
    CARD_ARTST_NAME VARCHAR(100),
    CARD_SET_IDE INT NOT NULL,
    CARD_FLAG_FACE INT NOT NULL DEFAULT 0,
    CARD_CHILD_IDE INT
);
GO

创建表本身不会造成任何问题。我们使用脚本提供主要数据以进行测试。但是,本周新增了CARD_FLAG_FACECARD_CHILD_IDE列,它们给了我一些问题。

以下是我们用于提供数据的脚本:

INSERT INTO CARD (CARD_NUMBER, CARD_NAME, CARD_COLOR, CARD_MANA_COST, CARD_MANA_CONVT, CARD_TYPE, CARD_POWER, CARD_TOUGH, CARD_RARTY, CARD_TEXT_ABILT, CARD_TEXT_FLAVR, CARD_ARTST_NAME, CARD_FLAG_FACE, CARD_CHILD_IDE, CARD_SET_IDE)
SELECT 1, 'Angel of Glory''s Rise', 'White', '5WW', '7', 'Creature  - Angel', '4', '6', 'Common', 'Flying When Angel of Glory''s Rise enters the battlefield, exile all Zombies, then return all Human creature cards from your graveyard to the battlefield. ', '"Justice isn''t done until undeath is undone." ', 'James Ryman', 0, null, @CardSetIdForAVR
    GO

如果我们运行此命令,则会收到以下错误:

  

Msg 8152,Level 16,State 14,Line 9
  字符串或二进制数据将被截断   声明已经终止。

第9行是INSERT语句的确切行,这让我很困惑。现在,如果我在剥离两个新列时运行相同的脚本:

INSERT INTO CARD (CARD_NUMBER, CARD_NAME, CARD_COLOR, CARD_MANA_COST, CARD_MANA_CONVT, CARD_TYPE, CARD_POWER, CARD_TOUGH, CARD_RARTY, CARD_TEXT_ABILT, CARD_TEXT_FLAVR, CARD_ARTST_NAME, CARD_SET_IDE)
SELECT 1, 'Angel of Glory''s Rise', 'White', '5WW', '7', 'Creature  - Angel', '4', '6', 'Common', 'Flying When Angel of Glory''s Rise enters the battlefield, exile all Zombies, then return all Human creature cards from your graveyard to the battlefield. ', '"Justice isn''t done until undeath is undone." ', 'James Ryman', @CardSetIdForAVR
GO

现在它运行顺利。我不明白为什么会发生错误,我需要你的帮助。

修改

根据许多请求(因为我找不到错误),我已经发布了原始代码。

1 个答案:

答案 0 :(得分:4)

这里有几个问题:

1 - 您的专栏OBJECT_WEAKNESSvarchar(2),但您正试图将'None'放入。这可能导致您的截断问题

2 - 您的CREATE TABLE语句没有第一列的数据类型,因此这不是可执行代码

3 - 您需要转义Finely crafted to Salzman's specifications

中的引号

修改

您使用实际代码进行的更新非常清楚地显示了问题:

CARD_RARTY VARCHAR(1) NOT NULL

'Common'

如果我将其设为'C',则可以正常使用。