答案 0 :(得分:0)
Local System创建的LocalDB实例存在问题。请参阅MS doc for SQL LocalDB:
中的以下内容我遇到过你提到的两个问题。 我找到了这些的解决方法以及许多其他相关问题,但这是一个痛苦的过程。如果我不得不重新开始,我会听取微软的建议并避免本地系统拥有的实例,或使用SQL LocalDB之外的其他东西。
注意事项:
最有可能的是,您的实例已损坏,未被删除。尝试再次创建实例。如果创建不成功,则现有的损坏实例会阻止重新创建,删除和连接。此类损坏可能发生在64位进程中由本地系统帐户创建的实例中,但随后在32位进程中进行访问,该进程也作为本地系统运行(反之亦然)。
我发现完全删除损坏的实例的唯一方法是
从此处删除损坏实例的文件夹(如果在64位进程中创建):
C:\ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Microsoft SQL Server本地数据库\实例\ {实例名称}
或此处(如果在32位进程中创建):
C:\ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Microsoft SQL Server本地数据库\实例\ {实例名称}
并删除相关的注册表项。
毕竟,在再次创建实例时,请确保您从具有相同“位数”(32或64)的进程创建和访问实例。这是繁琐且难以实施的,除非您拥有该机器并控制对它的所有访问。
我发现通过作为本地系统运行的进程连接到本地系统所拥有的LocalDB实例的唯一一致方法是指定命名管道连接字符串中实例的地址。即,
Server=np:\\.\pipe\LOCALDB#xxxxxxxx\tsql\query
取代
Server=(localdb)\.\{instance name}
您可以使用sqllocaldb.exe工具找到LocalDB实例的命名管道地址,使用以下语法:
sqllocaldb info {instance name}
您可能在不同的操作系统(32位与64位)或不同版本的SQL LocalDB或其组合上取得了成功,但我发现只有在使用命名管道地址进行连接时才能取得成功。尝试通过实例名称进行连接可能无法连接,甚至更糟糕的是,会破坏实例,如问题#2的答案中所述。