使用没有计算机名称的Windows身份验证脚本SQL Server登录

EMP*_*EMP 4 sql-server

我想编写一个SQL 2005脚本来创建一个使用Windows身份验证的新登录.Windows用户是本地帐户(不是域帐户).许多SQL Server计算机上都存在具有相同名称的本地帐户,我希望在所有这些计算机上运行相同的脚本.

看起来很简单:

CREATE LOGIN [MyUser]
FROM WINDOWS
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用!SQL返回错误,说Give the complete name: <domain\username>.

当然,我可以为一台机器执行此操作并且它可以工作,但是相同的脚本在其他机器上不起作用.

EMP*_*EMP 12

看起来sp_executesql就是答案,就像沙滩发布的那样.我也会发布我的,因为如果你像我们一样使用命名的SQL实例,@@ SERVERNAME就无法正常工作.

DECLARE @loginName SYSNAME
SET @loginName = CAST(SERVERPROPERTY('MachineName') AS SYSNAME) + '\MyUser'

IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE [name] = @loginName)
BEGIN
    DECLARE @sql NVARCHAR(1000)
    SET @sql = 'CREATE LOGIN [' + @loginName + '] FROM WINDOWS'
    EXEC sp_executesql @sql
END
Run Code Online (Sandbox Code Playgroud)