sqlserver 数据库,数据表加载报错:
日期 2024/5/24 8:28:59
日志 作业历史记录 (Load_07YYPT)
步骤 ID 3
服务器 DESKTOP-IE30PLD
作业名称 Load_07YYPT
步骤名称 0103_加载事故清单数据
持续时间 00:00:54
SQL 严重性 16
SQL 消息 ID 2528
已通过电子邮件通知的操作员
已通过网络发送通知的操作员
已通过寻呼通知的操作员
重试次数 0
消息
已以用户 DESKTOP-IE30PLD\lly 的身份执行。 将截断字符串或二进制数据。 [SQLSTATE 22001] (错误 8152) 语句已终止。 [SQLSTATE 01000] (错误 3621) DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 [SQLSTATE 01000] (消息 2528) DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 [SQLSTATE 01000] (消息 2528). 该步骤失败。
1、查询某个表的各字段长度
SELECT
COLUMN_NAME,
CHARACTER_MAXIMUM_LENGTH
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'AMI_YYPT_M6_Accident' -- 替换为你的表名
AND TABLE_SCHEMA = 'dbo'; -- 替换为你的架构名,默认是dbo
2、遍历查询某个表各字段的实际长度
DECLARE @tableName NVARCHAR(50)= 'Server_Up_AMI_YYPT_M6_Accident_Temp';
IF OBJECT_ID(N'TableColumnMaxLen', N'U') IS NULL
BEGIN
CREATE TABLE TableColumnMaxLen
(
TableName NVARCHAR(50) NOT NULL ,
ColumnName NVARCHAR(50) NOT NULL ,
ColumnMaxLen INT NOT NULL ,
PRIMARY KEY ( TableName, ColumnName )
);
END;
DECLARE @columnName NVARCHAR(50);
DECLARE @columnMaxLen INT;
DECLARE @sql NVARCHAR(MAX);
DECLARE @initState INT= -1;
DECLARE @searchingState INT= -2;
IF NOT EXISTS ( SELECT 1
FROM dbo.TableColumnMaxLen
WHERE TableName = @tableName )
BEGIN
INSERT TableColumnMaxLen
SELECT @tableName ,
COLUMN_NAME ,
@initState
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tableName;
END;
WHILE 1 = 1
BEGIN
SET @columnName = ( SELECT TOP 1
ColumnName
FROM TableColumnMaxLen
WHERE TableName = @tableName
AND ColumnMaxLen = @initState
);
IF @columnName IS NULL
BREAK;
UPDATE TableColumnMaxLen
SET ColumnMaxLen = @searchingState
WHERE TableName = @tableName
AND ColumnName = @columnName;
SET @sql = 'SELECT @columnMaxLen=ISNULL(MAX(LEN([' + @columnName
+ '])), 0) FROM ' + @tableName;
-- PRINT @sql;
EXEC sp_executesql @sql, N'@columnMaxLen int out', @columnMaxLen OUT;
UPDATE TableColumnMaxLen
SET ColumnMaxLen = @columnMaxLen
WHERE TableName = @tableName
AND ColumnName = @columnName;
END;
select * from TableColumnMaxLen WHERE TableName = @tableName;
3、修改某个表的字段长度
根据步骤1、2做结果对照,找出超字段预设长度的字段名进行修改。
alter table AMI_YYPT_M6_Accident
alter column VIN码 nvarchar(50)
通过以上步骤完成数据表的运维。