2013-02-28 26 views
6

Đối với máy chủ SQL không phải LocalDb, tôi có thể SELECT SERVERPROPERTY('ServerName') để lấy tên của máy chủ và cá thể mà tôi đang chạy. Tuy nhiên, đối với máy chủ LocalDb, tôi nhận được SERVERNAME\LOCALDB#SOMEHASH. Làm thế nào tôi có thể lấy tên cá thể cục bộ?Làm cách nào để xác định tên phiên bản LocalDb trong tập lệnh SQL?

SOLUTION:

Các giải pháp để khai thác dụ, làm việc trên cả hai LocalDB và "bình thường" SQL Server instance:

DECLARE @serverName NVARCHAR(151) 
IF SERVERPROPERTY('IsLocalDb') = 1 
    SELECT @serverName = 'np:\\.\pipe\' + CONVERT(NVARCHAR(128), SERVERPROPERTY('InstanceName')) + '\tsql\query' 
ELSE 
    SELECT @serverName = CONVERT(NVARCHAR(128), SERVERPROPERTY('ServerName')) 

Một số nền rằng tôi nên đã đề cập trong câu hỏi ban đầu: Chúng tôi có một cơ sở dữ liệu cấu hình cho ứng dụng của chúng tôi. Trong số những thứ khác, nó lưu trữ các chuỗi kết nối. Đối với các máy phát triển và kiểm thử tích hợp, chúng ta muốn có thể tạo ra một cơ sở dữ liệu với một kịch bản lệnh và có chuỗi kết nối tham chiếu đến cá thể cục bộ. Vì vậy, tôi cần phải có một chuỗi kết nối làm việc (mà LOCALDB#SOMEHASH là không). Kể từ khi có một số lây lan trong phiên bản của máy chủ cơ sở dữ liệu, tôi cần một cái gì đó mà có thể xử lý cả hai trường hợp.

+0

Tại sao SERVERNAME \ LOCALDB # SOMEHASH không được chấp nhận? –

+0

@RaySaltrelli: Bởi vì nó không thể được sử dụng để kết nối với localdb từ mã trong các thử nghiệm của tôi – carlpett

+0

Chọn @@ Servername không phải là những gì bạn cần? – granadaCoder

Trả lời

3

Đây có phải là:.

SELECT SERVERPROPERTY ('InstanceName') 

EDIT

từ link

Kết nối với Instance Shared của LocalDB

Để kết nối với một trường hợp chia sẻ của LocalDB thêm \ (dấu chấm + dấu gạch chéo ngược) vào chuỗi kết nối để tham chiếu không gian tên được dành riêng cho các phiên bản được chia sẻ. Ví dụ, để kết nối với một cá thể được chia sẻ của LocalDB có tên AppData, hãy sử dụng một chuỗi kết nối như (localdb). \ AppData như là một phần của chuỗi kết nối. Người dùng kết nối với một cá thể được chia sẻ của LocalDB mà họ không sở hữu phải có đăng nhập Windows Authentication hoặc SQL Server Authentication.

Nếu ứng dụng của bạn sử dụng một phiên bản của .NET trước 4.0.2 bạn phải kết nối trực tiếp đến các đường ống được đặt tên của các LocalDB. Giá trị tên đường ống Instance là đường ống được đặt tên mà thể hiện của LocalDB đang lắng nghe. Phần của tên đường ống Instance sau LOCALDB # sẽ thay đổi mỗi khi cá thể của LocalDB được bắt đầu. Để kết nối với cá thể của LocalDB bằng cách sử dụng SQL Server Management Studio, hãy nhập tên đường ống Instance vào hộp tên máy chủ của hộp thoại Kết nối với cơ sở dữ liệu. Từ chương trình tùy chỉnh của bạn, bạn có thể thiết lập kết nối với phiên bản LocalDB bằng cách sử dụng một chuỗi kết nối tương tự như SqlConnection conn = new SqlConnection(@"Server=np:\\.\pipe\LOCALDB#F365A78E\tsql\query");

+0

Điều đó trả về phần 'LOCALDB # SOMEHASH', thật không may. – carlpett

+0

bạn có quen thuộc với [this] (http://msdn.microsoft.com/en-us/library/hh510202.aspx) – shibormot

+0

Có, và do đó câu hỏi của tôi. Trong thử nghiệm nhanh nhất của tôi ít nhất, tôi không thể kết nối với '(localdb) \ LOCALDB # SOMEHASH'. Tôi có nên mong đợi để có thể? – carlpett