我正在尝试使用存储过程创建数据库,如下所示:
CREATE PROCEDURE [dbo].[usp_CreateDatabase]
@dbName nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @createDbQuery nvarchar(max) = 'CREATE DATABASE '+ Quotename(@dbName);
EXEC (@createDbQuery)
END
此存储过程将位于Master
数据库中。
当我在Management Studio中执行此操作时,它按预期工作并创建数据库。
C#代码:
using (Data.MasterDB db = new Data.MasterDB())
{
db.usp_CreateDatabase(databaseName);
}
dbContext
具有Master
数据库的连接字符串。
但是当我尝试使用Entity Framework从我的应用程序执行相同操作时,它会抛出
多语句事务中不允许CREATE DATABASE语句 数据库'TestDb'不存在。确保正确输入名称
答案 0 :(得分:0)
您的应用程序在执行程序之前是否创建了一个Transaction? 如果是这样,那将导致此问题,因为过程也在创建事务。
如果您要使用"自动提交"执行管理工作室(或任何IDE)中的过程,您将看到相同的行为。关闭,或者如果你把它包装在这样的交易中:
BEGIN TRANSACTION
EXECUTE dbo.usp_CreateDatabase TmpData
COMMIT;