我正在处理一个查询,将联接服务器上的表结构复制到本地数据库中的通用表列表中。
但是由于某些原因,十进制数据类型被更改为数字类型。这似乎仅在从联接服务器选择时发生。但是,当我尝试在我的本地系统上进行相同操作时,无法复制出问题。
该错误发生的环境中,本地和联接服务器的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.'+@tblname + ' where 1 = 0')
delete from @tbls where ID = @id
END
select * into tblname from [linkedserver].MyDatabase.dbo.tblname where 1 = 0
更改为select TOP 1 * into from [linkedserver].MyDatabase.dbo.tblname
,以仅上传一行数据(之后不能截断表)。 - Konstantin Taranov