我正在嘗試使用 SQL Server 2012。我有一個數據庫,我需要通過代碼創建一個新的數據庫用戶。但我不處理它。首先,這是我的 SQL 查詢CREATE USER TestUser FOR LOGIN TestUser在 SQL Server 中,它運行良好。我有這段代碼:internal class ServerContext : DbContext{ public ServerContext(DbContextOptions<ServerContext> options) : base(options) { }}<'''>DbContextOptions<ServerContext> _options;var optionsBuilder = new DbContextOptionsBuilder<ServerContext>();var connectionString = string.Format(ConnectionString.ConnectString, url, dbName, login, password);_options = optionsBuilder.UseSqlServer(connectionString).Options;using (var context = new ServerContext(_options)){ if (data.Count() == 0) { context.Database.ExecuteSqlCommand(Query.CreateDbUser, new SqlParameter("@Login", "user")); }}<'''>public static class Query{ public static string CreateDbUser = "CREATE USER @Login FOR LOGIN @Login";}此查詢轉換為: exec sp_executesql N'CREATE USER @Login FOR LOGIN @Login',N'@Login nvarchar(4)',@Login=N'User' 我得到這個錯誤:“@Login”周圍的語法無效。我認為這是由于參數“user”作為字符串傳遞并在執行查詢時用引號指定。
1 回答

月關寶盒
TA貢獻1772條經驗 獲得超5個贊
您不能使用以下語句,因為變量不能替換對象的名稱:
exec sp_executesql N'CREATE USER @Login FOR LOGIN @Login',N'@Login nvarchar(4)',@Login=N'User'
這將嘗試創建一個名為 的用戶@Login,這是無效的。您需要使用動態 SQL:
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'CREATE USER ' + QUOTENAME(@Login) + N' FOR LOGIN '+ QUOTENAME(@Login) + N';';
EXEC sp_executesql @SQL;
- 1 回答
- 0 關注
- 85 瀏覽
添加回答
舉報
0/150
提交
取消