Đố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.
Tại sao SERVERNAME \ LOCALDB # SOMEHASH không được chấp nhận? –
@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
Chọn @@ Servername không phải là những gì bạn cần? – granadaCoder