Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用t-SQL创建数据库而不指定其文件名_C#_Asp.net_Sql_Sql Server_Tsql - Fatal编程技术网

C# 使用t-SQL创建数据库而不指定其文件名

C# 使用t-SQL创建数据库而不指定其文件名,c#,asp.net,sql,sql-server,tsql,C#,Asp.net,Sql,Sql Server,Tsql,我尝试运行以下SQL语句来创建数据库: string strSQL = "CREATE DATABASE " + strDatabaseName + " ON PRIMARY " + "(" + "SIZE = 10MB, FILEGROWTH = 20%) " + "LOG ON (" + "SIZE = 5MB, " + "FILEGROWTH = 20%)" + " COLLATE SQL_Latin1_General_CP1_CI_

我尝试运行以下SQL语句来创建数据库:

string strSQL = "CREATE DATABASE " + strDatabaseName +
    " ON PRIMARY " +
    "(" +
    "SIZE = 10MB, FILEGROWTH = 20%) " +
    "LOG ON (" +
    "SIZE = 5MB, " +
    "FILEGROWTH = 20%)" +
    " COLLATE SQL_Latin1_General_CP1_CI_AS;";
我想使用默认的.mdf和.ldf文件位置,但要指定大小和文件增长参数。问题是,当我运行它时,会出现一个错误:

此创建/更改数据库中需要文件选项FILENAME 声明

那么,有什么方法可以实现我想要实现的目标吗?

试试这个

      string strSql = " DECLARE @data_path nvarchar(256); "+
"SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)"+
 "                 FROM master.sys.master_files"+
  "                WHERE database_id = 1 AND file_id = 1);"+


"EXECUTE ('CREATE DATABASE " + strDataBaseName +
"ON PRIMARY "+
   "("+
   "  NAME = FileStreamDB_data "+
   " ,FILENAME = ''' + @data_path + '" + strDataBaseName +"_data.mdf''"+
   " ,SIZE = 10MB"+
   " ,MAXSIZE = 50MB"+
   " ,FILEGROWTH = 15%"+
   " )LOG ON ("+
   " NAME = FileStreamDB_log"+
   " ,FILENAME = ''' + @data_path + '" + strDataBaseName + "_log.ldf''" +
   " ,SIZE = 5MB, "+
   " FILEGROWTH = 20%)"+
"     COLLATE SQL_Latin1_General_CP1_CI_AS')";

根据@sahalMoidu的建议,这里有一个稍微更新的SQL版本:

DECLARE @dbFileName nvarchar(256);
CREATE DATABASE [testdb2] COLLATE SQL_Latin1_General_CP1_CI_AS;
SET @dbFileName = (SELECT [name] FROM master.sys.master_files WHERE [database_id] = DB_ID(N'testdb2') AND file_id = 1);
EXECUTE ('ALTER DATABASE [testdb2]
 MODIFY FILE(
NAME = ''' + @dbFileName + ''',
SIZE = 5MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 20%
);

谢谢这很有效。我看到您获取了第一个可用数据库的路径,并使用它来构建我的新数据库路径。我很好奇,id=1的DB总是
master.mdf
?这对远程SQL Server有效吗?是的。应该有效,因为没有主数据库的SQL Server实例是不存在的,并且SQL Server首先创建主数据库,因此数据库的id应为1。注意,您可以从服务器属性SERVERPROPERTY('instancedefaultdatapath')和SERVERPROPERTY获取实际的默认路径('instancedefaultlogpath')。这是SSMS在幕后所做的事情-打开“新建数据库”对话框时,请查看SQL Server Profiler。