2016-03-11 17 views
11

Tôi đã thấy câu hỏi trên ở một trong các blog. Nhưng không thể tìm thấy câu trả lời ở đâu cả. Có lẽ các chuyên gia SQL Server ở đây có thể giúp tôi về vấn đề này.Bí danh bảng bị bỏ qua cho các cột được chỉ định trong câu lệnh INSERT trong SQL Server

CREATE TABLE #DEMO (VALUE1 INT, VALUE2 VARCHAR(10)) 

CREATE TABLE #DEMO1 (VALUE1 INT, VALUE2 VARCHAR(10)) 

INSERT INTO #DEMO VALUES (1, '10') 

INSERT INTO #DEMO1 (a.a.a.value1,b.b.b.value2) 
    SELECT 
     Value1, Value2 
    FROM #DEMO 

Nếu bạn thấy câu lệnh chèn, tôi đã chỉ định một số tên bí danh trong cột được chèn. Để tự hỏi của tôi, SQL Server đã không ném bất kỳ lỗi trong khi thực hiện các tuyên bố. Lý do đằng sau điều này là gì? Bất cứ ai có thể giúp đỡ?

+4

Thú vị. Nhanh chóng đoán nó có thể sử dụng 'tên tiếp xúc' trong danh sách cột và bỏ qua phần còn lại. Thông tin thêm [tại đây] (http://stackoverflow.com/questions/33424988/sql-server-object-names/33425543#33425543) và [tại đây] (https://blogs.msdn.microsoft.com/ialonso/2007/12/21/msg-1013-the-đối tượng-s-và-s-in-the-từ-khoản-có-cùng-tiếp xúc-tên-sử dụng-tương quan-tên-để-phân biệt chúng /) – lad2025

+4

Thú vị, tôi không thấy bất kỳ điều gì trong tài liệu sẽ cho phép các vòng loại đó. –

+0

@ lad2025. Cảm ơn các liên kết. Nhưng có vẻ như Tên Exposed có liên quan đến tên bảng không phải là cột – bmsqldev

Trả lời

1

Danh sách tên cột ở đây là danh sách tên trong bảng # DEMO1 do đó vòng loại không có bất kỳ ý nghĩa nào và rất có thể chỉ bị bỏ qua. Một điều thú vị là tại sao nó không làm tăng lỗi cú pháp, hoặc là nếu bạn muốn sử dụng các tên cột như a.a.a.value1 thì bạn sẽ phải đặt tên trong [] hoặc "".

+0

, nghĩa là [a.a.a.value1] hoặc "a.a.a.value1". Cả hai sẽ cung cấp lỗi cột không hợp lệ – bmsqldev

+0

Có, bởi vì bạn sẽ phải tạo các cột có tên như vậy - nếu không thì các cột đó không tồn tại. –

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