2014-11-17 14 views
7

Tôi đang sử dụng SQL Server 2012 Express. Cơ sở dữ liệu có một bảng [config] với một thành viên kiểu 'datetime'. Xuất nó (chỉ dữ liệu) của Management Studio dưới dạng tập lệnh SQL tạo ra:MS SQL Server 2012 xuất datetime dưới dạng tập lệnh mà nó không thể nhập

INSERT [dbo]. [Config] ([id], [name], [creation_date], ...) VALUES (13, N'Test ', CAST (N'2014-11-17 09: 29: 07.047' AS DateTime), ...)

Bây giờ khi thực thi tập lệnh được tạo, nó phàn nàn rằng giá trị cho loại ngày giờ không hợp lệ. Tôi có thể khắc phục bằng cách thay thế khoảng trống giữa ngày và giờ bằng "T":

INSERT [dbo]. [Config] ([id], [name], [creation_date], ...) VALUES (13, N'Test ', CAST (N'2014-11-17 T 09: 29: 07.047' AS DateTime), ...)

Tìm hiểu về định dạng ngày giờ, định dạng bằng cách sử dụng trống dường như không được hỗ trợ.

Làm cách nào để tạo tập lệnh có định dạng ngày giờ được hỗ trợ (tức là bao gồm 'T')?

Làm cách nào để nhập định dạng sử dụng trống mà không thay đổi tập lệnh được nhập?

BTW, có vẻ như nó hoạt động trên các cài đặt SQL Server khác, nhưng tôi không thể tìm thấy sự khác biệt. Cũng gỡ bỏ cài đặt và cài đặt lại SQL Server đã không giúp đỡ.

+0

Loại định dạng ngày giờ nào được chấp nhận được kiểm soát bởi Cài đặt vùng trong Windows trên máy chủ. Có lẽ các cài đặt SQL Server khác (trên các máy chủ khác) có các Cài đặt vùng khác. –

+0

Điều này hiện đã được khắc phục trong SQL Server 2014, nhưng đối với SQL Server 2012, bạn sẽ cần dòng Mikael gợi ý –

Trả lời

10

Làm cách nào để nhập định dạng sử dụng trống mà không thay đổi tập lệnh được nhập ?

Bạn phải thay đổi tập lệnh nhập nhưng chỉ một chút. Chỉ định dateformat làm ymd ở đầu tập lệnh.

set dateformat ymd; 

Làm thế nào tôi có thể tạo ra các kịch bản với định dạng được hỗ trợ datetime (ví dụ: bao gồm. 'T')?

Vote cho một sự thay đổi ...

"Generate scripts" for data, scripts datetime in a locale dependent format

+1

Tôi không thể thay đổi tập lệnh được nhập vì nó được tạo ra (bởi Management Studio). Do đó câu hỏi của tôi là "Làm cách nào tôi có thể nhập ... ** mà không thay đổi ** tập lệnh đã nhập?". Tuy nhiên, cảm ơn bạn đã đặt vé cho lỗi này. – user2261015

+0

Tại sao vậy? Nó chỉ là văn bản và có thể được sửa đổi. –

+0

Quy trình xử lý hàng loạt chạy tự động nền. Tôi sẽ phải thêm một số bước vá để các lô mà tìm và sửa chữa các báo cáo chèn bị ảnh hưởng trong một số lượng lớn các kịch bản. Lưu ý rằng câu lệnh chèn đơn của OP của tôi chỉ là một ví dụ. Điều này là có thể, nhưng nó cũng có thể sử dụng một RDBM khác thay vì MS SQL Server, một hệ điều hành khác hoặc không có SQL chút nào - để nói nó một chút khiêu khích. Chỉ một vấn đề của nó là :-) – user2261015

0

Một hướng dẫn DateFormat là tất cả là mất. Sau khi SET DATEFORMAT được đặt ra, tôi thậm chí không cần sử dụng CAST AS.

Cũng lưu ý rằng định dạng ngày của bạn tùy thuộc vào nơi bạn ở trên thế giới. Ở Đan Mạch, tôi có định dạng DD-MM-YYYY và 24 giờ đồng hồ, vì vậy hướng dẫn định dạng ngày của tôi sẽ là DMY thay vì YMD. Nếu trình tự sai, có thể bạn sẽ gặp lỗi về giá trị vượt quá giá trị được phép. Tôi đã làm. :)

Dưới đây là một ví dụ về mã mà làm việc cho tôi chỉ là bây giờ sử dụng biên tập SQL riêng của Microsoft:

SET DATEFORMAT DMY 
INSERT INTO mytable ([id],[page],[saved]) VALUES ('2','29','16-01-2017 13:53:22') 

Chúc mừng mã hóa, người bạn đời.

Các vấn đề liên quan