服务器字段长度修改,SQL服务器:与字段长度控制

们都面临着在SQL Server字符串长度控制一个很大的问题问题2008SQL服务器:与字段长度控制

我们系统的简要回顾:

在持久性临时区域进口数据从*.txt文件(分号作为分隔符),在SQL Server环境中使用批量插入;

在PSA表中所有列都是varchar(MAX);

使用插入语句进行清理操作,基于带有多条条件的select。

我们处理的问题是单列类型和长度,事实上在数据仓库级别它必须是数字,其长度不能超过13位。

的选择如下:

select cast(LTRIM(RTRIM(data_giacenza)) as numeric),

LTRIM(RTRIM(codice_socio)),

LTRIM(RTRIM(codice_gln)),

LTRIM(RTRIM(tipo_gln)),

LTRIM(RTRIM(codice_articolo_socio)),

LTRIM(RTRIM(codice_ean_prodotto)),

LTRIM(RTRIM(codice_ecat_prodotto)),

LTRIM(RTRIM(famiglia)),

LTRIM(RTRIM(marca)),

LTRIM(RTRIM(classificazione_liv_1)),

LTRIM(RTRIM(classificazione_liv_2)),

LTRIM(RTRIM(classificazione_liv_3)),

LTRIM(RTRIM(classificazione_liv_4)),

LTRIM(RTRIM(modello)),

LTRIM(RTRIM(descrizione_articolo)),

cast(LTRIM(RTRIM(giacenza)) as numeric),

cast(LTRIM(RTRIM(acquistato)) as numeric), 'X' FROM psa_stock a

where EXISTS

(

SELECT 0

FROM(

SELECT

data_giacenza

,codice_socio

,codice_gln

,codice_articolo_socio

FROM psa_stock

where

LEN(LTRIM(RTRIM(data_giacenza))) = 8 and LEN(LTRIM(RTRIM(codice_socio))) = 3

and LEN(LTRIM(RTRIM(codice_gln))) = 13 and LEN(LTRIM(RTRIM(tipo_gln))) = 3

and LEN(LTRIM(RTRIM(codice_articolo_socio))) <= 15

and (LEN(LTRIM(RTRIM(codice_ean_prodotto))) <= 13 or LEN(ISNULL(codice_ean_prodotto, '')) = 0)

and (LEN(LTRIM(RTRIM(codice_ecat_prodotto))) = 9 or LEN(ISNULL(codice_ecat_prodotto, '')) = 0)

and LEN(LTRIM(RTRIM(famiglia))) = 2

and (LEN(LTRIM(RTRIM(marca))) <= 20 or LEN(ISNULL(marca, '')) = 0)

and (LEN(LTRIM(RTRIM(modello))) <= 30 or LEN(ISNULL(modello, '')) = 0)

and (LEN(LTRIM(RTRIM(descrizione_articolo))) <= 50 or LEN(ISNULL(descrizione_articolo, '')) = 0)

and LEN(LTRIM(RTRIM(giacenza))) <= 5

and LEN(LTRIM(RTRIM(acquistato))) <= 5

and (LEN(LTRIM(RTRIM(classificazione_liv_1))) <= 15 or LEN(ISNULL(classificazione_liv_1, '')) = 0)

and (LEN(LTRIM(RTRIM(classificazione_liv_2))) <= 15 or LEN(ISNULL(classificazione_liv_2, '')) = 0)

and (LEN(LTRIM(RTRIM(classificazione_liv_3))) <= 15 or LEN(ISNULL(classificazione_liv_3, '')) = 0)

and (LEN(LTRIM(RTRIM(classificazione_liv_4))) <= 15 or LEN(ISNULL(classificazione_liv_4, '')) = 0)

and ISNUMERIC(ltrim(rtrim(REPLACE(data_giacenza, ' ', '')))) = 1

and ISNUMERIC(ltrim(rtrim(REPLACE(codice_gln, ' ', '')))) = 1

and ISNUMERIC(LTRIM(RTRIM(REPLACE(giacenza, ' ', '')))) = 1 and charindex(',', giacenza) = 0

and ISNUMERIC(LTRIM(RTRIM(REPLACE(acquistato, ' ', '')))) = 1

and ISNUMERIC(ltrim(rtrim(REPLACE(codice_ean_prodotto, ' ', '')))) = 1

and ISNUMERIC(ltrim(rtrim(REPLACE(codice_ecat_prodotto, ' ', '')))) = 1

and codice_socio in (select codice_socio from ana_socio)

and tipo_gln in (select tipo from ana_gln)

and codice_gln in (select codice_gln from dw_key_gln)

group by

data_giacenza

,codice_socio

,codice_gln

,codice_articolo_socio

having COUNT (*) = 1

) b

where

a.data_giacenza = b.data_giacenza and

a.codice_articolo_socio = b.codice_articolo_socio and

a.codice_socio = b.codice_socio and

a.codice_gln = b.codice_gln)

临界字段是codice_ean_prodotto。

实际上,它允许将值也视为SEAGAT7636490026751,NE20000003039,NE20000002168,它们不是数字,而第一个重叠最大尺寸。

至于结果,insert语句也给后面

串o二进制数据将被截断

错误和失败的插入。

在此先感谢!我期待你的帮助!

恩里科

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值