1.你可以写一个程序在这个程序中将数据库建立起来,我们可以使用MSSQL的管理其生成每一个数据的SQL脚本,然后在程序中将这些脚本读取到程序中顺序执行,这样就可以在程序中建立数据库了,有一点要注意的是,看是没有Create数据库,你只能在Master数据库中建立目标数据库,然后你就需要通过一条Use database的语句来将当前数据库切换到你的目标数据库,然后再执行Create Table,Create View等建立数据库SQL语句。不过只能建立数据库的基本结构。
还有一种方法是充分利用SQL语句Restore Database的语句来建立数据库,这样就可以建立起包括数据在内的数据库,不过通用性不好。
还有一种方法是充分利用SQL语句Restore Database的语句来建立数据库,这样就可以建立起包括数据在内的数据库,不过通用性不好。
解决方案 »
- windows server 2003 r2 enterprise edition 装Sqlserver 2000
- 送分咯。。最最基础的问题。都来看看吧
- 急:关于自定义函数的问题?
- MS SQL SERVER 2008 Database Mail , sysmail_mailitmes 资料莫名消失.
- 再续先进先出
- c++连接 mssql2005问题,急!!!!
- .NET Freamework与SQL SEVER 的关系
- 急用啊 !!!!
- 请问如下错误的原因是什么?
- 存储过程的问题!
- MS Sql Server怎样读取日志?
- 我装oracle8.1.5,为什么找不到Enterprise Manage?
但是在MASTER库和自己定义的库之间怎么做还是比较模糊!
WINGSUN 能不能详细说明一下!!
能不能详细说说如何用程序执行一段Sql语句?
declare @sql=nvarchar(1000)
create datebase 'yourdbname'
go
select @sql='use yourdbname'
select @sql=char(13)+@sql+'create table ....'
select @sql=char(13)+@sql+'go'..............exec (@sql)
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSql As String
On Error GoTo errlabelstrPwd & "'"
cnn.ConnectionString = CNN_STR
cnn.CursorLocation = adUseClient '客户端游标, 此时无法看见其他用户所作的添加、更改和删除
‘ cnn.CursorLocation=adUseServer '服务器游标,OK
' cnn.Mode = adModeRead
cnn.Open
rs.Open strSql, cnn, adOpenDynamic, adLockBatchOptimistic关于ADO的使用可参考msdn,不过msdn98的太老,msdn2000有最新的特性说明
EXECUTE sp_attach_db @dbname = N'<database_name, sysname, test_db>',
@filename1 = N'<filename1, nvarchar(260), c:\program files\microsoft sql server\mssql\data\test_db.mdf>',
@filename2 = N'<filename2, nvarchar(260), c:\program files\microsoft sql server\mssql\data\test_db_log.ldf>'
GO把数据库挂上/.
2、连接USER,创建TBALE、VIEW等
它会根据AllSqlLine的内容,一行一行执行建库。AllSqlLine是有SQL Server 7.0自动生成
的。分段依据是“GO”。 :)var
DbName: String;
OldDbExist: Boolean;
ErrStr, ErrMsg: String;
ErrCode: Integer;
AllSqlLine: TStrings;
ThisSqlLine: TStrings;
i, j: Integer;
begin
if not CheckBoxConnect.Checked then
begin
MessageDlg('请先选择“连接数据库”!', mtWarning, [mbOk], 0);
Exit;
end; DbName := EditDataBaseName.Text;
if MessageDlg(
'注意, 请确认:' + #13 +
'数据库' + DbName + '现在无其他用户在使用' + #13 + #13 +
'开始建库吗?', mtConfirmation, mbOKCancel, 0) = mrCancel then
Exit;
MemoCreateDbMsg.Clear; MemoCreateDbMsg.Lines.Add('正在建立数据库...'); // 检测指定数据库是否已经存在
with DataModuleAv.QueryCreateDb.SQL do
begin
Clear;
Add('BEGIN');
Add(' USE ' + DbName); // 尝试打开指定库
Add(' USE ' + FMasterDb);
Add('END');
end;
OldDbExist := True;
try
DataModuleAv.QueryCreateDb.ExecSQL;
except // 打开数据库失败?
OldDbExist := False;
end; if OldDbExist then // 已有此库?
begin // 删除旧库
if MessageDlg(
'数据库"' + DbName + '"已存在, 覆盖吗?', mtWarning, mbOKCancel, 0)
<> mrOK then
begin
MemoCreateDbMsg.Lines.Add('数据库"' + DbName + '"已存在, 取消操作。');
Exit;
end;
DataModuleAv.QueryCreateDb.SQL.Text := ('DROP DATABASE ' + DbName);
try
DataModuleAv.QueryCreateDb.ExecSQL;
except // 删除错误
// 查找出错代码
DataModuleAv.QueryCreateDb.SQL.Text := ('SELECT @@ERROR AS ErrCode');
DataModuleAv.QueryCreateDb.Open;
ErrStr := DataModuleAv.QueryCreateDb.FieldByName('ErrCode').AsString;
if StrToInt(ErrStr) = 3702 then
ErrStr := ErrStr + ': (数据库正被其他用户使用)';
MessageDlg(
'无法删除旧数据库! ' + #13 +
'错误代码: ' + ErrStr,
mtError, [mbOk], 0);
Exit;
end;
end; // 建立新数据库
DataModuleAv.QueryCreateDb.SQL.Text := 'CREATE DATABASE ' + DbName;
try
DataModuleAv.QueryCreateDb.ExecSQL;
except
MemoCreateDbMsg.Lines.Add('数据库建立错误!');
DataModuleAv.QueryCreateDb.SQL.Text := ('SELECT @@ERROR AS ErrCode');
DataModuleAv.QueryCreateDb.Open;
ErrCode := DataModuleAv.QueryCreateDb.FieldByName('ErrCode').AsInteger;
MemoCreateDbMsg.Lines.Add('错误代码: ' + IntToStr(ErrCode));
if ErrCode=262 then
MemoCreateDbMsg.Lines.Add('提示信息: 用户权限不够')
else if ErrCode=1802 then
MemoCreateDbMsg.Lines.Add(
'提示信息: SQL Server内部错误! 要创建的数据库文件已存在,请先手工删除。'
);
Exit;
end; DataModuleAv.QueryCreateDb.SQL.Text := 'USE ' + DbName;
DataModuleAv.QueryCreateDb.ExecSQL; AllSqlLine := TStringList.Create;
ThisSqlLine := TStringList.Create;
try
AllSqlLine.LoadFromFile(GetRunPath + 'CreateDb.SQL');
except
MemoCreateDbMsg.Lines.Add('文件打开错误: ' + GetRunPath + 'CreateDb.SQL');
Exit;
end; i := 0;
while TRUE do
begin
if ExpandSqlLines(AllSqlLine, i, ThisSqlLine) then
Break;
DataModuleAv.QueryCreateDb.SQL := ThisSqlLine; try
DataModuleAv.QueryCreateDb.Params.Clear;
DataModuleAv.QueryCreateDb.ExecSQL;
except
on E: Exception do
begin
ErrMsg := E.Message;
DataModuleAv.QueryCreateDb.SQL.Text := ('SELECT @@ERROR AS ErrCode');
DataModuleAv.QueryCreateDb.Open;
ErrStr := DataModuleAv.QueryCreateDb.FieldByName('ErrCode').AsString; MemoCreateDbMsg.Lines.Add('创建数据库失败!');
MemoCreateDbMsg.Lines.Add('错误信息: ' + ErrMsg);
MemoCreateDbMsg.Lines.Add('错误代码: ' + ErrStr);
MemoCreateDbMsg.Lines.Add('-----产生错误的SQL语句-----(第'+IntToStr(i+1)+'个命令)。');
for j:=0 to ThisSqlLine.Count-1 do
MemoCreateDbMsg.Lines.Add(ThisSqlLine[j]);
MemoCreateDbMsg.Lines.Add('---------------------------');
Exit;
end;
end;
Inc(i);
end; //Add the data into some tables
//first is into the table tree
MemoCreateDbMsg.Lines.Add('正在设定初始数据...');
try
AllSqlLine.LoadFromFile(GetRunPath + 'InitData.sql');
except
MemoCreateDbMsg.Lines.Add('文件打开错误: ' + GetRunPath + 'InitData.sql');
Exit;
end;
i := 0;
while TRUE do
begin
if ExpandSqlLines(AllSqlLine, i, ThisSqlLine) then
Break;
DataModuleAv.QueryCreateDb.SQL := ThisSqlLine; try
DataModuleAv.QueryCreateDb.ExecSQL;
except
DataModuleAv.QueryCreateDb.SQL.Text := ('SELECT @@ERROR AS ErrCode');
DataModuleAv.QueryCreateDb.Open;
ErrStr := DataModuleAv.QueryCreateDb.FieldByName('ErrCode').AsString; MemoCreateDbMsg.Lines.Add('创建数据库失败!');
MemoCreateDbMsg.Lines.Add('错误代码: ' + ErrStr);
MemoCreateDbMsg.Lines.Add('-----产生错误的SQL语句-----(第'+IntToStr(i+1)+'个命令)。');
for j:=0 to ThisSqlLine.Count-1 do
MemoCreateDbMsg.Lines.Add(ThisSqlLine[j]);
MemoCreateDbMsg.Lines.Add('---------------------------');
Exit;
end;
Inc(i);
end;
MemoCreateDbMsg.Lines.Add('建库成功...');
end;