Intereting Posts
Обновление через подзапрос, что если подзапрос не возвращает строк? Есть ли эквивалент IBM Iseries / DB2 для SQL Profiler? Выбор положительного агрегатного значения и игнорирование отрицательного значения в Postgres SQL Выйти из скрипта MySQL, если существует база данных Можно ли запретить доступ к SQL Server из определенных программ? Цитата Escape в запросе HQL Используется ли ограничение на максимальное количество таблиц соединения SQL на весь запрос или подзапросы подсчитываются отдельно? Отправка заполнителя DEFAULT через JDBC? Зачем нам нужно использовать внешние ключи? SQL Server 2008 – функция DECLARE Поисковый запрос времени OrientDB Как использовать переменную tablename для готового оператора java insert Получить последние 12 месяцев данные из Db с годом в Postgres Написание эффективных запросов в SAS с использованием Proc sql с Teradata Проблема с Full Outer Join не работает должным образом

Динамическое литье данных из одной таблицы в другую с помощью SQL SERVER

У меня есть процедура хранения, которая извлекает данные столбца таблицы. Скажем, что это имя таблицы является таблицей счетов. У меня есть другая таблица, таблица Invoice_Staging, которая имеет данные в формате varchar. Теперь я хочу получить данные из Invoice_staging, отбросить значения в соответствии с типами данных, указанными в таблице счетов-фактур, и сделать объемную вставку в таблицу счетов-фактур. Теперь, случайно, есть значение, Кастинг которого невозможен, в этом случае я не хочу, чтобы моя основная вставка терпела неудачу. Скорее сделайте это конкретное поле NULL и вставьте его в таблицу счетов. Я застрял с извлечением данных и их отбрасыванием по мере необходимости. Пожалуйста, покажите мне способ, который может вызвать свет извести на мой вопрос. Хранимая процедура выглядит следующим образом:

create PROCEDURE usp_stagingToProduction @staging_tableName varchar(200), @master_tableName varchar(200) 

AS BEGIN SET NOCOUNT ON;

 Declare @count int, -- for counting the total number of records in a table @RowCount int, @columnName varchar(200), @columnDataTypeName varchar(200), @maxLength int, @precision int, @scale int, @isNullable int, @primaryKey int, @sql varchar(5000) Set @sql = '' create table #MyTemporaryTable ( ColumnName varchar(500), DataType varchar(100), MaxLength int, [Precision] int, Scale int, IsNullable bit, PrimaryKey bit, flag bit default 0, id int identity(1,1) ) insert into #MyTemporaryTable SELECT c.name 'ColumnName', t.Name 'DataType', c.max_length 'MaxLength', c.precision 'Precision', c.scale 'Scale', c.is_nullable 'IsNullable', ISNULL(i.is_primary_key, 0) 'PrimaryKey', 0 FROM sys.columns c INNER JOIN sys.types t ON c.user_type_id = t.user_type_id LEFT OUTER JOIN sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id LEFT OUTER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id WHERE c.object_id = OBJECT_ID('Invoice') -- select * from #MyTemporaryTable -- To display the content of temporary table declare @column varchar(500) declare @datatype varchar(500) declare @id int Set @sql = @sql + 'Insert Into ' + @master_tableName Set @sql = @sql + ' Select ' while exists (select Top 1 * from #MyTemporaryTable where flag = 0) BEGIN Select @id = id, @datatype = DataType, @column = ColumnName from #MyTemporaryTable Where flag = 0 Set @sql = @sql + ' Cast(' + @column + ' As ' + @datatype + '), ' -- building the cast query update #MyTemporaryTable set flag = 1 where id = @id -- Select @sql -- to see whats happing END Select @sql = SubString(@sql, 1, LEN(@sql) - 1) Set @sql = @sql + ' From' +' ' + @staging_tableName -- #MyTemporaryTable' Select @sql -- just to display query. nothing to do anything with the logic ------------------- select @count = count(*) from @staging_tableName -- getting column count from staging table declare @counter as int set @counter = 1 if(@count >0) -- data found in staging table -- logic here for casting and inserting the data to the table else 

END GO

–usp_usp_stagingToProduction 'Invoice'