Не удалось выполнить преобразование Sql при преобразовании значения nvarchar в тип данных int.
Всем Привет,
Я борюсь с этим уже несколько дней. Я использую SQL SERVER v17.5
Я перепробовал много предложений и решений со всего интернета, но, похоже, не могу избавиться от этой ошибки. Эта процедура работает безупречно, пока я не попытаюсь добавить часть.Примечание колонка (в соответствии с новыми бизнес-требованиями). Он хранится как nvarchar(500) в исходной таблице и в любой другой таблице, с которой я работаю. Я пробовал COLLATION, CAST, CONVERT, ISNUMERIC(), даже отдельный оператор update! Кажется, ничего не работает.
Я здесь на пределе своих возможностей. Может ли кто-нибудь пролить свет на это? Я посмотрел на что-то, связанное с CLR, и не уверен, имеет ли это какое-то отношение к оператору MERGE и/или серверу, к которому он пытается подключиться. Пожалуйста, помогите!
Заранее спасибо :)
Вот мой запрос:=
USE [SomeDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_RegionalPart] @RegionID as int AS BEGIN Declare @sql as nvarchar(max) Declare @sqltrunc as nvarchar(max) Declare @dbase as nvarchar(100) if @RegionID = 1 Select @dbase = 'USE NorthAmericanDW' if @RegionID = 2 Select @dbase = 'USE SouthAmericanDW' if @RegionID = 3 Select @dbase = 'USE EuropeanDW' if @RegionID = 4 Select @dbase = 'USE AsianPacificDW' If OBJECT_ID('tempdb.dbo.#tmp') is not null drop table tempdb.dbo.#tmp Create Table #tmp ([PlantID] [INT] NULL ,[PartID] [int] NULL ,[PartNo] [nvarchar] (100) NULL ,[Col1] [int] NULL ,[Col2] [int] NULL ,[Col3] [int] NULL ,[PartNote] [nvarchar] (500) NULL ,[Col4] [int] NULL ,[Col5] [float] NULL ,[Col6] [nvarchar](20) NULL ,[Col7] [datetime] NULL ,[Col8] [int] NULL ,[Col9] [varchar](1) NULL ,[Col10] [float] NULL ,[CurrentRecord] [bit] NULL) PRINT 'Temp Table Created' Select @sqltrunc = 'Truncate Table ' + Replace(@dbase,'USE ',Space(0)) + '.dbo.RegionalPart' exec(@sqltrunc) PRINT 'Table Truncated' Select @Sql = @dbase + space(1) + 'SELECT PlantID ,PartID ,PartNo ,Col1 ,Col2 ,Col3 ,Part.Note ,Col4 ,Col5 ,Col6 ,Col7 ,Col8 ,Col9 ,Col10 ,CurrentRecord FROM PartTABLE part INNER JOIN 1 INNER JOIN 2 INNER JOIN 3 INNER JOIN 4 INNER JOIN 5 LEFT JOIN 1 WHERE 1=1 AND join2.regionid = ' + cast(@RegionID as nvarchar(1)) PRINT @sql Insert Into #tmp exec sp_executesql @sql PRINT 'Insert values in #Tmp' Select @sql = @dbase + space(1) + 'MERGE dbo.RegionalPart AS TARGET USING #tmp AS SOURCE ON (TARGET.PlantID = SOURCE.PlantID and TARGET.PartID = SOURCE.PartID ) WHEN MATCHED AND (TARGET.[PartNo] <> SOURCE.[PartNo] OR TARGET.[Col1] <> SOURCE.[Col1] OR TARGET.[Col2] <> SOURCE.[Col2] OR TARGET.[Col3] <> SOURCE.[Col3] OR TARGET.[PartNote] <> SOURCE.[PartNote] OR TARGET.[Col4] <> SOURCE.[Col4] OR TARGET.[Col5] <> SOURCE.[Col5] OR TARGET.[Col6] <> SOURCE.[Col6] OR TARGET.[Col7] <> SOURCE.[Col7] OR TARGET.[Col8] <> SOURCE.[Col8] OR TARGET.[Col9] <> SOURCE.[Col9] OR TARGET.[Col10] <> SOURCE.[Col10]) THEN UPDATE SET TARGET.[PartNo] = SOURCE.[PartNo] ,TARGET.[Col1] = SOURCE.[Col1] ,TARGET.[Col2] = SOURCE.[Col2] ,TARGET.[Col3] = SOURCE.[Col3] ,TARGET.[PartNote] = SOURCE.[PartNote] ,TARGET.[Col4] = SOURCE.[Col4] ,TARGET.[Col5] = SOURCE.[Col5] ,TARGET.[Col6] = SOURCE.[Col6] ,TARGET.[Col7] = SOURCE.[Col7] ,TARGET.[Col8] = SOURCE.[Col8] ,TARGET.[Col9] = SOURCE.[Col9] ,TARGET.[Col10] = SOURCE.[Col10] WHEN NOT MATCHED BY TARGET THEN INSERT ([PlantID] ,[PartID] ,[PartNo] ,[Col1] ,[Col2] ,[Col3] ,[PartNote] ,[Col4] ,[Col5] ,[Col6] ,[Col7] ,[Col8] ,[Col9] ,[Col10] ,[CurrentRecord]) VALUES ( SOURCE.[PlantID] ,SOURCE.[PartID] ,SOURCE.[PartNo] ,SOURCE.[Col1] ,SOURCE.[Col2] ,SOURCE.[Col3] ,SOURCE.[PartNote] ,SOURCE.[Col4] ,SOURCE.[Col5] ,SOURCE.[Col6] ,SOURCE.[Col7] ,SOURCE.[Col8] ,SOURCE.[Col9] ,SOURCE.[Col10] ,SOURCE.[CurrentRecord]);' PRINT 'INSERT STATEMENT: ' PRINT @SQL exec sp_executesql @sql PRINT 'INSERT STATEMENT AFTER EXECUTION: ' PRINT @SQL Drop Table #tmp End
Что я уже пробовал:
Я использую SQL SERVER v17.5
Я уже пробовал:
ПРЕОБРАЗОВАТЬ,
БРОСАТЬ,
Статистика()
инструкция update
СОПОСТАВЛЕНИЯ,
CHill60
Какой тип данных-столбец dbo.RegionalPart.[Партнер] ?
Member 14057347
Тип nvarchar(500)
Я не собирался делать репост. Новичок на сайте и в конечном итоге создал 2 вопроса вместо одного. Есть ли способ объединить их вместе?
Member 14057347
Кроме того, когда я бросаю этот столбец при создании своей временной таблицы, он не выдает никаких ошибок. Я также попытался создать правильную таблицу вместо временной таблицы, чтобы увидеть, имеет ли это значение.
Он выдает ошибку только тогда, когда пытается вставить строки в целевую таблицу. Я также попытался воссоздать целевую таблицу, чтобы убедиться, что там нет конфликтов типов данных.