首页 > 解决方案 > 在 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 时转换失败。

标签: sqlsql-servertsql

解决方案


尝试这个:

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

推荐阅读