加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer 自动截断字符串

发布时间:2020-12-12 12:43:13 所属栏目:MsSql教程 来源:网络整理
导读:测试数据: CREATE TABLE #test(a VARCHAR(1))INSERT INTO #test SELECT '22222222222222222222111'SELECT * FROM #testDROP TABLE #test 执行以上语句会出错并提示: [Err] 22001 - [SQL Server]将截断字符串或二进制数据。 如果希望截断字符串并成功插入,

测试数据:

CREATE TABLE #test(a VARCHAR(1))
INSERT INTO #test SELECT '22222222222222222222111'
SELECT * FROM #test
DROP TABLE #test
执行以上语句会出错并提示:
[Err] 22001 - [SQL Server]将截断字符串或二进制数据。

如果希望截断字符串并成功插入,通常的做法是在插入时检测长度并使用substring函数做截断处理,

也可使用触发器在插入前判断。此外,SQLServer也有系统参数可以控制是否自动截断:

SET ANSI_WARNINGS OFF

此设置只对当前会话有效。可通过以下方法查询当前设置状态:

DECLARE @ANSI_WARN VARCHAR(3) = 'OFF'
IF (8 & @@OPTIONS) = 8
	SET @ANSI_WARN = 'ON'
SELECT @ANSI_WARN AS ANSI_WARNINGS

建库或修改库时可以指定该选项:

ALTER DATABASE temp SET ANSI_WARNINGS OFF
CREATE DATABASE temp SET ANSI_WARNINGS OFF

当然,强烈不推荐这么做。修改该选项后,可在系统库视图中查看:

SELECT name,is_ansi_warnings_on FROM sys.databases
全局的设定查看方法为:
sp_configure 'user options'
其中config_value=0则为无数据。设置方法为:
EXEC sp_configure 'user options',8
RECONFIGURE


注意

  1. 设置的优先级为:会话>全局>数据库选项
  2. SQLServer2008以前的版本只能通过以下方式设置(并且该过程在2008被废弃):
sp_dboption '数据库名','ansi warnings',1
参考

配置 user options 服务器配置选项、SET ANSI_WARNINGS (Transact-SQL)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读