【问题标题】:Data length validation in stored procedure in SQL ServerSQL Server 存储过程中的数据长度验证
【发布时间】:2016-12-28 12:44:40
【问题描述】:

我有 4 个表,分别称为 A、B、C、D。这 4 个表有 10、20、30、40 列。但是这 4 个表有 5 个共同的列,具有相同的数据类型和不同的长度。

我要执行的操作是,我将一个值表(单行也包含这 5 个常见值的值)发送到存储过程。

现在我想将该行插入到应该通过表名找到的表中(表名在行本身中可用)。在我需要进行数据长度验证之前。

不应该是这样的

if(len(@value1) > 800)

我需要一些不同的方法来生成长度验证。因为将来,我可能会出于某种目的更改列的长度。当时我无法更改存储过程中的值。请给我解决方案

【问题讨论】:

  • 哪个 dbms ? sqlserver ?
  • 是的。微软 SQL 服务器 2012

标签: sql sql-server stored-procedures sql-server-2012


【解决方案1】:

您可以使用INFORMATION_SCHEMA.COLUMNS 视图来获取属于该表的列的信息。

DECLARE @ColumnLength INT

SELECT @ColumnLength  = CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName' AND COLUMN_NAME='columnName'

-- Use the variable @ColumnLength for conditons in your stored proc so need of hardcoding length

IF LEN(@value1) > @ColumnLength 
BEGIN

 -- Your statements
END

【讨论】:

  • 如果有最小数量,最好解决验证问题。列验证。但是当我使用超过 10 列时,验证需要花费太多时间,并且可能会导致超时错误。
  • 如果有最小数量,最好解决验证问题。列验证。但是当我使用超过 10 列时,验证需要花费太多时间,并且可能会导致超时错误。你能建议任何其他简单的方法吗?
  • 谢谢哈桑。谁能推荐一下?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多