sql - 在 SQL Server 中将 null 插入整数字段时出现问题
问题描述
使用可为空的整数构建动态插入查询时出现以下错误:
CREATE TABLE TestTable(
[my_id] [bigint] NOT NULL,
[so_id] [int] NULL
)
CREATE TABLE TestTable2(
[my_id] [bigint] NOT NULL,
[so_id] [int] NULL
)
DECLARE @so_id AS int;
DECLARE @my_id AS INT;
declare @my_sql as nvarchar(max);
INSERT INTO TestTable (my_id, so_id) VALUES (1, NULL); --so_id might be null or 0,1,2
set @my_id = (SELECT top 1 my_id FROM TestTable);
SET @so_id = (SELECT top 1 so_id FROM TestTable);
SET @my_sql = 'INSERT INTO TestTable2 (my_id, so_id) VALUES (' + CAST(@my_id AS varchar(MAX)) + ', NULL )' --if so_id is null insert null into TestTable2
EXEC sp_executesql @my_sql
SELECT * FROM TestTable2
SET @my_sql = 'INSERT INTO TestTable2 (my_id, so_id) VALUES (' + CAST(@my_id AS varchar(MAX)) + ', ' + ISNULL(@so_id, 'NULL') + ')' --if so_id is null insert null into TestTable2
EXEC sp_executesql @my_sql
DROP TABLE TestTable
DROP TABLE TestTable2
我得到错误:
将 varchar 值 'INSERT INTO TestTable2 (my_id, so_id) VALUES (1, ' 转换为数据类型 int 时转换失败。
解决方案
尝试这个:
SET @my_sql = 'INSERT INTO TestTable2 (my_id, so_id) VALUES (' + CAST(@my_id AS varchar(MAX)) + ', ' + ISNULL(CAST(@so_id AS VARCHAR), 'NULL') + ')' --if so_id is null insert null into TestTable2
推荐阅读
- python - Flask-Security,在蓝图中实现 SECURITY_TRACKABLE 功能
- angular6 - NgRx 存储列表和详细数据对象
- javascript - React Native - 返回上一页时如何刷新 FlatList?
- grafana - Istio 1.0.2 在浏览器上访问 grafana
- javascript - 按特定顺序将 JavaScript 对象分组到数组中
- ios - 如何在装有 Beta iOS 的 iPhone 上运行我的应用程序?
- javascript - 在 android studio 中访问 .xls 文件时出错
- django - Django:表单在索引中有效,但在特定页面中无效
- java - 引用库的类无法解析为类型
- c# - System.Data.SqlClient.SqlException (0x80131904) 在包管理器中执行更新数据库时