gpt4 book ai didi

sql-server - SQL 服务器 2005 : Insert query returning Operand type clash: ntext is incompatible with smallint

转载 作者:行者123 更新时间:2023-12-05 00:14:45 24 4
gpt4 key购买 nike

我希望这是一个快速的问题。还没有为此找到工作代码,我有点不知所措。

我正在使用 SQL Server 2005 上的一个旧数据库。它有一个动态问卷(或一千个,实际上......长话短说),每个问题的答案都可以存储为 smallint 或 ntext。

当前的“answers”表如下:

AnswerID (PK, int, not null)
EvalID (int, null)
QuestionID (int, null)
NumericAnswer (smallint, null)
TextAnswer (ntext, null)

(是的,我知道 ntext 已被弃用。这是一张旧表。)

这个表现在有超过 300,000 条记录,而且越来越大。所以我正在寻找更有效的方法来存储数据,并决定做一个小实验,将所有内容移动到一个 sql_variant 字段(目前,每行只能在两个答案列之一中有数据,而不是两个)。

所以我做了另一个表,叫做AnswersTest:

AnswerID (PK, int, not null)
EvalID (int, null)
QuestionID (int, null)
AnswerGiven (sql_variant, null)

...我现在正在尝试将所有现有数据从Answers 获取到AnswersTest,最好是按照它们的原始顺序...所以我运行插入查询,但它不工作。我已经尝试了以下两种方法:

INSERT INTO AnswersTest (EvalID, QuestionID, AnswerGiven)
SELECT EvalID, QuestionID, ISNULL(NumericAnswer,TextAnswer) AS AnswerGiven FROM Answers ORDER BY AnswerID

...和

INSERT INTO AnswersTest (EvalID, QuestionID, AnswerGiven)
SELECT EvalID, QuestionID, CONVERT(ntext,CASE WHEN NumericAnswer IS NULL THEN TextAnswer ELSE NumericAnswer END) AS AnswerGiven FROM Answers ORDER BY AnswerID

在这两种情况下,我得到以下信息:操作数类型冲突:ntext 与 smallint 不兼容

我知道对此一定有一个简单的答案......我只是在画一张白纸(自从我不得不用 TSQL 做很多事情以来已经有几个月了),我找不到一个通过搜索工作答案。请帮忙。 :)

编辑:通过反复试验找到答案...

答案可能不是最好的答案(它可能会跳过一些不必要的环节),但它是一次性查询并且有效。 :)

INSERT INTO AnswersTest (EvalID, QuestionID, AnswerGiven)
SELECT EvalID, QuestionID, CASE WHEN CONVERT(sql_variant,NumericAnswer) IS NULL THEN CONVERT(sql_variant,CONVERT(varchar(8000),TextAnswer)) ELSE CONVERT(sql_variant,NumericAnswer) END AS AnswerGiven FROM Answers ORDER BY AnswerID

(注意:我尝试了 varchar(max),但这是不允许的。虽然答案并没有那么长......没有人在这些调查中写论文......所以我只是将其更改为 varchar(8000),并且成功了。

感谢阅读,抱歉占用您的时间! :)

最佳答案

当我不小心将字符串值赋给定义为 int 的列时,遇到了类似的错误。请重新排列插入语句中的值和表字段例如

Insert into Table (int,string) values (string,int)

将不起作用并产生上述错误。所以重新按各自的方式排列。

 Insert into Table (int,string) values (int,string)

关于sql-server - SQL 服务器 2005 : Insert query returning Operand type clash: ntext is incompatible with smallint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17709246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com