81

下面的 SQL:

SELECT notes + 'SomeText'
FROM NotesTable a 

给出错误:

数据类型 nvarchar 和 text 在 add 运算符中不兼容。

4

6 回答 6

82

唯一的方法是将您的文本字段转换为 nvarchar 字段。

Select Cast(notes as nvarchar(4000)) + 'SomeText'
From NotesTable a

否则,我建议在您的应用程序中进行连接。

于 2008-09-10T15:13:16.070 回答
23

您可能还需要考虑 NULL 值。在您的示例中,如果列notes具有空值,则结果值为 NULL。如果您希望 null 值表现为空字符串(以便答案出现 'SomeText'),请使用 IsNull 函数:

Select IsNull(Cast(notes as nvarchar(4000)),'') + 'SomeText' From NotesTable a
于 2008-09-16T21:09:09.610 回答
21

如果您使用 SQL Server 2005 或更高版本,根据 Notes 字段中数据的大小,您可能需要考虑转换为 nvarchar(max) 而不是转换为可能导致字符串截断的特定长度。

Select Cast(notes as nvarchar(max)) + 'SomeText' From NotesTable a
于 2008-09-11T16:38:46.510 回答
6

您必须将字符串类型显式转换为相同类型才能连接它们,在您的情况下,您可以通过在“SomeText”(N'SomeText')前面简单地添加一个“N”来解决问题。如果这不起作用,请尝试 Cast('SomeText' as nvarchar(8))。

于 2008-09-10T15:15:48.950 回答
4

另一个选项是CONCAT命令:

SELECT CONCAT(MyTable.TextColumn, 'Text') FROM MyTable
于 2018-01-31T10:53:49.597 回答
2

如果您使用的是 SQL Server 2005(或更高版本),您可能需要考虑在表定义中切换到 NVARCHAR(MAX);SQL Server 2000 的 TEXT、NTEXT 和 IMAGE 数据类型将在 SQL Server 的未来版本中弃用。SQL Server 2005 提供了对数据类型的向后兼容性,但您可能应该改用 VARCHAR(MAX)、NVARCHAR(MAX) 和 VARBINARY(MAX)。

于 2008-09-15T10:35:15.150 回答