Pergunta : Introduzir o trabalho dentro de um disparador: Erro que converte o tipo de dados varchar a numérico

Olá!,

I am que tem o problema introduzir em uma tabela using um disparador.  A coisa estranha é que era trabalhar atrasado na semana passada.  A única coisa que eu adicionei era um índice à tabela em InvoiceNumber e LineItemNo_Int.

If eu incapacito o disparador, os dados é introduzido.  Quando eu permito o disparador, eu começ um erro:

Msg 8114, nível 16, estado 5, trig_InvoiceLinesInsertCheck do procedimento, linha 27
Error que converte o tipo de dados varchar a numeric.

Table Def: TABELA do
CREATE [dbo]. [InvoiceLines] (IDENTIDADE do
[InvoiceLinesID] [int] (1.1) NAO NULOS,
[InvoiceNumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[CustomerNo] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[LineItemNo] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[LineItemNo_Int] [int] o ZERO, o
[PartNo] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[CustomerPartNo] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[quantidade] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[UnitOfMeasure] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[UnitPrice] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[disconto] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[VAT_Tax] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[PONumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[PODate] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[OrderNumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS,
[PackingSlip] [varchar] (100) ORDENA O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[PlantNumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[DepartmentNumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[AccountNumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[CompanyWarehouse] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[SalesOrderCarrier] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[LineItemPONumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[LineItemReleaseNumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[MKPositionNumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[TrackingNumber] [varchar] (100) ORDENAR O ZERO de SQL_Latin1_General_CP1_CI_AS, o
[InvoiceFormat] [varchar] (100) ORDENAR SQL_Latin1_General_CP1_CI_AS NULL
) no


Trigger Def: DISPARADOR do

alter [dbo]. [trig_InvoiceLinesInsertCheck] SOBRE [dbo]. O
[de InvoiceLines] EM VEZ do on
do nocount do
AS
BEGIN
da INSERÇÃO DECLARA
do @InvoiceNumber (os 100) declara
do @OrderNumber (os 100) declara que
do @PositionNumber (os 100) DECLARA @InvoiceFormat ajustados varchar do
do @InvoiceFormat (100) = (InvoiceFormat seleto do INTRODUZIDO) o
se @InvoiceFormat = '@InvoiceNumber AJUSTADO novo do Br/> BEGIN
do Format'< = (InvoiceNumber seleto do INTRODUZIDO) @OrderNumber ajustado do
= (OrderNumber seleto do INTRODUZIDO) @PositionNumber ajustado do
= (LineItemNo seleto do INTRODUZIDO) o

SE EXISTE (selecionar * de InvoiceLines onde InvoiceNumber = @InvoiceNumber e OrderNumber = @OrderNumber e LineItemNo = supressão do
BEGIN
do @PositionNumber) de InvoiceLines onde InvoiceNumber = o @InvoiceNumber e OrderNumber = o @OrderNumber e LineItemNo = a inserção do @PositionNumber
END
END
no
de InvoiceLines
(InvoiceNumber, CustomerNo, LineItemNo, LineItemNo_Int, PartNo, CustomerPartNo, Quantity, UnitOfMeasure, UnitPrice, disconto, VAT_Tax, PONumber, PODate, OrderNumber, PackingSlip, PlantNumber, DepartmentNumber, AccountNumber, CompanyWarehouse, SalesOrderCarrier, LineItemPONumber, LineItemReleaseNumber, MKPositionNumber, TrackingNumber, InvoiceFormat) selecionam o
InvoiceNumber, CustomerNo, LineItemNo, LineItemNo_Int, PartNo, CustomerPartNo, Quantity, UnitOfMeasure, UnitPrice, Discount, VAT_Tax, PONumber, PODate, OrderNumber, PackingSlip, PlantNumber, DepartmentNumber, AccountNumber, CompanyWarehouse, SalesOrderCarrier, LineItemPONumber, LineItemReleaseNumber, MKPositionNumber, TrackingNumber, InvoiceFormat
da pergunta INTRODUZIDA do
END


Insert:

insert no
values
de InvoiceLines
(quantidade do
InvoiceNumber, do
CustomerNo, do
LineItemNo, do
LineItemNo_Int, do
PartNo, do
CustomerPartNo, do
, disconto do
UnitOfMeasure, do
UnitPrice, do
,
VAT_Tax,
PONumber,
PODate,
OrderNumber,
PackingSlip,
PlantNumber,
DepartmentNumber,
AccountNumber,
CompanyWarehouse,
SalesOrderCarrier,
LineItemPONumber,
LineItemReleaseNumber,
MKPositionNumber,
TrackingNumber,
InvoiceFormat
) (
“31775ABC”,
            “013608”,
“20”,
20,
“TESTPART”,
“TESTPART2”,
“2”,
'',
“26.70”,
'',
'',
“166TEST”,
'',
“31TEST”,
'',
'',
'',
'',
'',
Br novo/>) “de UPAC”, de
'', de
'', de
de
'', do Format'< do
de “TESTTRACKINGNUM”, '
class= do

Resposta : Introduzir o trabalho dentro de um disparador: Erro que converte o tipo de dados varchar a numérico

>dgmg: A aplicação que está chamando a indicação da inserção tem os controles que permitirão somente que uma única fileira seja introduzida em um momento.

Ainda perigoso, devido à natureza global de um disparador.  Você não deve supr que TODAS AS atualizações originarão SEMPRE dessa aplicação.  Especialmente, quando as técnicas de codificação apropriadas do disparador forem seguro barato. : >)




>Alguma outra idéia?
Reduzir a inserção à primeira coluna somente.  Esperançosamente trabalha. Adicionar sucessivamente algumas colunas de cada vez até encontram a coluna/dados de ofensa.
Outras soluções  
 
programming4us programming4us