【问题标题】:String or binary data would be truncated when using it in a stored procedure在存储过程中使用字符串或二进制数据时会被截断
【发布时间】:2019-11-29 09:24:51
【问题描述】:

我在数据库中创建了这个TYPE 表:

CREATE TYPE [dbo].[AccessLevel] AS TABLE
(
      [RoleId] [INT] NULL,
      [Access] [NVARCHAR](1) NULL,
      [IsDelete] [BIT] NULL
)
GO

我需要向其中插入数据,但是当我使用此代码时:

DECLARE @AccessLevel AccessLevel 

INSERT INTO @AccessLevel VALUES (4, 'dfdfg', 0)
INSERT INTO @AccessLevel VALUES (4, 'dfdfg', 0)

EXEC InsertAndUpdateAccessLevel @AccessLevel

这是我的存储过程:

ALTER PROCEDURE [dbo].[InsertAndUpdateAccessLevel]
    (@AccessLevel AS AccessLevel READONLY)
AS
BEGIN
    INSERT INTO RoleAccess (RoleId, Access, IsDelete)
        SELECT * FROM @AccessLevel
END

我收到此错误:

消息 8152,第 16 级,状态 4,第 5 行
字符串或二进制数据将被截断

有什么问题?我该如何解决这个问题?

【问题讨论】:

  • 您正在尝试在[nvarchar](1) 中使用INSERT'dfdfg'。这显然不止 1 个字符。

标签: sql sql-server


【解决方案1】:

您正在尝试将 5 长度字符('dfdfg') 插入到 1 长度列 [Access] [nvarchar](1)

增加Table type中列的值。

CREATE TYPE [dbo].[AccessLevel] AS TABLE(
  [RoleId] [int] NULL,
  [Access] [nvarchar](25) NULL,
  [IsDelete] [bit] NULL
 )
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多