Я работаю над запросом, который копирует структуру таблицы из связанного сервера в локальную базу данных для общего списка таблиц.Изменения типа данных в новой таблице при использовании SELECT * INTO
Однако по какой-либо причине десятичные типы данных изменяются на числовые. Похоже, что это происходит при выборе на более связанных серверах. Однако, когда я пытаюсь сделать то же самое в своей локальной системе, я не смог бы воспроизвести проблему.
Окружающая среда, в которой произошла эта ошибка, SQL-версия локального и связанного сервера была разной (10, 12 соответственно). Не уверен, что это связано.
Если бы кто-нибудь мог пролить свет на это, он был бы очень признателен. Благодарю.
Этот запрос согласно ниже:
WHILE (select count(*) from @tbls) > 0
BEGIN
SELECT @id = 0, @tblname = '', @cols = '', @colSets = ''
select top 1 @id = ID, @tblname = TableName, @PKField = PKField, @DataType = DataType from @tbls
if exists (select 1 from sys.tables where name = @tblname)
begin
delete from @tbls where ID = @id
Continue;
end
exec('select * into '+ @tblname +' from [linkedserver].MyDatabase.dbo.'[email protected] + ' where 1 = 0')
delete from @tbls where ID = @id
END
В вашем сервере SqlServer знает, что наборы символов и форматы одинаковы. Таким образом, он сохраняет источник. Между разными серверами он обычно неявно отбрасывает все типы данных до самого высокого общего знаменателя для каждого типа данных. Поскольку вы просто пытаетесь создать таблицу без данных, см. Этот поток http://stackoverflow.com/questions/21547/in-sql-server-how-do-i-eneration-a-create-table-statement- for-a-given-table –
Положительный дубликат http://stackoverflow.com/questions/33513776/sql-auto-converts-decimal-to-numeric-when-select-insert –
@AndreeaDumitru Это может быть дубликат, но один ответ на это не отвечает. Также не был принят ответ ... –