SQL Server中text与nvarchar类型不兼容的查询问题求助
问题解决:SQL Server text类型与字符串参数比较报错
错误原因
SQL Server的text/ntext属于旧版大对象文本类型,不支持直接与nvarchar(pyodbc传递Python字符串时默认使用的类型)用=运算符比较,这是SQL Server本身的语法限制,即使改成ntext也无法解决。
解决方案
方案1:临时兼容(不修改表结构)
在SQL语句中把text列转换为可比较的字符串类型,比如nvarchar(max),示例代码:
cursor.execute('SELECT id, text FROM dbo.tags WHERE CAST(text AS nvarchar(max)) = ?', str(tag.text)) row = cursor.fetchone()
方案2:推荐修改表结构(长期最优解)
text和ntext是SQL Server已弃用的数据类型(从2008版本开始不推荐),官方建议用nvarchar(max)(Unicode文本)或varchar(max)(非Unicode文本)替代。执行以下SQL修改表结构:
-- 若存储Unicode文本,用nvarchar(max) ALTER TABLE dbo.tags ALTER COLUMN text nvarchar(max) NULL; -- 若仅存储非Unicode文本,用varchar(max) -- ALTER TABLE dbo.tags ALTER COLUMN text varchar(max) NULL;
修改后,你的原Python代码即可正常执行,因为nvarchar(max)/varchar(max)支持直接与字符串参数比较。
补充说明
Python字符串默认是Unicode,pyodbc驱动在传递字符串参数时,会自动映射为SQL Server的nvarchar类型,这是驱动的默认行为,和Tag.text的属性类型无关。
内容的提问来源于stack exchange,提问作者Chud37
相关产品推荐
相关产品推荐

