簡體   English   中英

如何在SQL腳本中確定LocalDb實例名稱?

[英]How to determine LocalDb instance name in SQL script?

對於非LocalDb SQL Server,我可以使用SELECT SERVERPROPERTY('ServerName')來獲取服務器的名稱以及我正在運行的實例。 但是,對於LocalDb服務器,我得到SERVERNAME\\LOCALDB#SOMEHASH 如何獲取本地實例名稱?

解:

獲取實例的解決方案,在LocalDB和“普通”SQL Server實例上工作:

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'))

我應該在原始問題中提到的一些背景:我們的應用程序有一個配置數據庫。 除此之外,它還存儲連接字符串。 對於開發人員計算機和集成測試,我們希望能夠使用腳本生成數據庫,並使連接字符串引用本地實例。 因此,我需要一個有效的連接字符串( LOCALDB#SOMEHASH不是)。 由於數據庫服務器版本有一些擴展,我需要能夠處理這兩種情況的東西。

這是:

SELECT SERVERPROPERTY ('InstanceName')

編輯

來自鏈接

連接到LocalDB的共享實例

要連接到LocalDB的共享實例,請將。\\(dot + backslash)添加到連接字符串以引用為共享實例保留的命名空間。 例如,要連接到名為AppData的LocalDB的共享實例,請使用連接字符串,例如(localdb)。\\ AppData作為連接字符串的一部分。 連接到他們不擁有的LocalDB共享實例的用戶必須具有Windows身份驗證或SQL Server身份驗證登錄。

如果您的應用程序在4.0.2之前使用.NET版本,則必須直接連接到LocalDB的命名管道。 實例管道名稱值是LocalDB實例正在偵聽的命名管道。 LOCALDB#之后的實例管道名稱部分將在每次啟動LocalDB實例時更改。 若要使用SQL Server Management Studio連接到LocalDB實例,請在“連接到數據庫引擎”對話框的“服務器名稱”框中鍵入“實例”管道名稱。 從您的自定義程序,您可以使用類似於SqlConnection conn = new SqlConnection(@"Server=np:\\\\.\\pipe\\LOCALDB#F365A78E\\tsql\\query");的連接字符串建立與LocalDB實例的連接SqlConnection conn = new SqlConnection(@"Server=np:\\\\.\\pipe\\LOCALDB#F365A78E\\tsql\\query");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM