2016-12-28 114 views
0

我有4个表称为A,B,C,D。这4个表有10,20,30,40列。但是这4个表格有5个具有相同数据类型和不同长度的公共列。SQL Server中存储过程中的数据长度验证

我要做的动作是,我向存储过程发送一个值表(具有这5个公共值的单行)到存储过程。

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

它不应该是这样

if(len(@value1) > 800) 

我需要一些不同的方式来产生长度确认。因为将来我可能会为了某种目的而改变列的长度。当时我无法更改存储过程中的值。请给我解决方案

+0

哪个dbms? sqlserver? –

+0

是的。 MS Sql Server 2012 – Prakash

回答

2

您可以使用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 
+0

如果没有最小值,这是解决验证的最好方法。列验证。但是当我使用10列以上时,需要花费太多时间进行验证,并且可能会导致超时错误。 – Prakash

+0

如果没有最小值,这是解决验证的最佳方法。列验证。但是当我使用10列以上时,需要花费太多时间进行验证,并且可能会导致超时错误。 你能否提出其他简单的建议? – Prakash

+0

对不起,我不知道替代.. –