Tôi đang làm việc trên truy vấn sao chép cấu trúc bảng từ máy chủ được liên kết vào cơ sở dữ liệu cục bộ để có danh sách chung các bảng.Thay đổi kiểu dữ liệu trong bảng mới khi sử dụng SELECT * INTO
Tuy nhiên vì lý do nào đó, các loại dữ liệu thập phân đang được thay đổi thành số. Điều này dường như chỉ xảy ra khi chọn vào các máy chủ được liên kết. Tuy nhiên khi cố gắng tương tự trên hệ thống cục bộ của tôi, tôi không thể tái tạo vấn đề.
Môi trường nơi lỗi này xảy ra phiên bản SQL của máy chủ cục bộ và được liên kết khác nhau (10, 12 tương ứng). Không chắc chắn nếu đó là liên quan.
Nếu ai đó có thể làm sáng tỏ điều này, nó sẽ được đánh giá cao. Cảm ơn.
Truy vấn là theo dưới đây:
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
Trong máy chủ của bạn, SqlServer biết rằng các bộ ký tự và định dạng giống nhau. Vì vậy, nó bảo tồn nguồn. Giữa các máy chủ khác nhau, nó thường sẽ ngầm đúc tất cả các kiểu dữ liệu tới mẫu số chung cao nhất cho mỗi kiểu dữ liệu. Vì bạn chỉ đang cố tạo một bảng không có dữ liệu, hãy xem chủ đề này http://stackoverflow.com/questions/21547/in-sql-server-how-do-i-generate-a-create-table-statement- for-a-given-table –
Trùng lặp có thể xảy ra của http://stackoverflow.com/questions/33513776/sql-auto-converts-decimal-to-numeric-when-select-insert –
@AndreeaDumitru Nó có thể là một bản sao, nhưng một câu trả lời không trả lời nó thực sự. Không phải là câu trả lời được chấp nhận ... –