當前位置:首頁 » 編程語言 » sqlservergoto
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlservergoto

發布時間: 2022-11-06 08:20:09

sqlserver goto語句

基本沒錯, no2,no3裡面exit了,後面在怎麼goto main呢? 要麼exit要麼goto main no2裡面set a=和set b=不用聲明,可以直接用set /p a= echo 後

⑵ 如何把SQLServer表數據導出為Excel文件

目前主要提到了三種辦法,一種在程序中調用DTS,二種使用SQL SERVER帶的BCP功能,三種使用openrowset。 具體看下面: 這是利用BCP來做的, 使用SQLServer自帶的bcp命令—— bcp 資料庫名.dbo.表名 out 文件名 –c –q –S」伺服器名」 –U」用戶名」 –P」密碼」 bcp 」select 語句」 queryout 文件名 –c –q –S」伺服器名」 –U」用戶名」 –P」密碼」 導出整張表: EXEC master..xp_cmdshell 'bcp "inter_custom.dbo.out_ck1" out c:\Temp.xls -c -q -S"PETER" -U"sa" -P"[email protected]"' 根據Query語句導出: EXEC master..xp_cmdshell 'bcp "select * from inter_custom.dbo.out_ck1" queryout c:\Temp.xls -c -q -S"PETER" -U"sa" -P"[email protected]"' 利用bcp要求資料庫的伺服器名,資料庫用戶名和密碼,這些必須傳到程序中。方法可以有很多中,大概的例子,可以看: http://www.cnblogs.com/kevin/archive/2004/09/21/45351.html 利用openrowset可以寫存儲過程,可以看下面的例子 引自CSDN的鄒建大大 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcere') = 1) drop procere [dbo].[p_exporttb] GO /*--數據導出EXCEL 導出查詢中的數據到Excel,包含欄位名,文件為真正的Excel文件 如果文件不存在,將自動創建文件 如果表不存在,將自動創建表 基於通用性考慮,僅支持導出標准數據類型 --鄒建 2003.10(引用請保留此信息)--*/ /*--調用示例 p_exporttb @sqlstr='select * from 地區資料' ,@path='c:\',@fname='aa.xls',@sheetname='地區資料' --*/ create proc p_exporttb @sqlstr varchar(8000),--查詢語句,如果查詢語句中使用了order by ,請加上top 100 percent @path nvarchar(1000),--文件存放目錄 @fname nvarchar(250),--文件名 @sheetname varchar(250)=''--要創建的工作表名,默認為文件名 as declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) --參數檢測 if isnull(@fname,'')=''set @fname='temp.xls' if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#') --檢查文件是否已經存在 if right(@path,1)<>'\' set @path=@path+'\' create table #tb(a bit,b bit,c bit) set @sql=@path+@fname insert into #tb exec master..xp_fileexist @sql --資料庫創建語句 set @sql=@path+@fname if exists(select 1 from #tb where a=1) set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE' +';CREATE_DB="'+@sql+'";DBQ='+@sql else set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES' +';DATABASE='+@sql+'"' --連接資料庫 exec @err=sp_oacreate 'adodb.connection',@obj out if @err<>0 goto lberr exec @err=sp_oamethod @obj,'open',null,@constr if @err<>0 goto lberr --創建表的SQL declare @tbname sysname set @tbname='##tmp_'+convert(varchar(38),newid()) set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a' exec(@sql) select @sql='',@fdlist='' select @fdlist=@fdlist+',['+a.name+']' ,@sql=@sql+',['+a.name+'] ' +case when b.name like '%char' then case when a.length>255 then 'memo' else 'text('+cast(a.length as varchar)+')' end when b.name like '%int' or b.name='bit' then 'int' when b.name like '%datetime' then 'datetime' when b.name like '%money' then 'money' when b.name like '%text' then 'memo' else b.name end FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp') and a.id=(select id from tempdb..sysobjects where name=@tbname) if @@rowcount=0 return select @sql='create table ['+@sheetname +']('+substring(@sql,2,8000)+')' ,@fdlist=substring(@fdlist,2,8000) exec @err=sp_oamethod @obj,'execute',@out out,@sql if @err<>0 goto lberr exec @err=sp_oadestroy @obj --導入數據 set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES ;DATABASE='+@path+@fname+''',['+@sheetname+'$])' exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']') set @sql='drop table ['+@tbname+']' exec(@sql) return lberr: exec sp_oageterrorinfo 0,@src out,@desc out lbexit: select cast(@err as varbinary(4)) as 錯誤號 ,@src as 錯誤源,@desc as 錯誤描述 select @sql,@constr,@fdlist go 從DataGrids中導出數據到Excel DataSet結果導出到Excel Export DataSets to Excel... 導出到Excel的四種方法 關於從net程序如何導出到excel微軟的msdn有專門的講述,在上面可以搜到。

⑶ sqlserver的存儲過程 求高手優化,

首先,goto+if 的組合其實實現的就是while的用法,可以去掉goto語句把Beg:if改成while即可
然後你寫了兩組關於max與min的查詢賦值,我看了下,結構完全一致,完全可以合並為一組

⑷ sqlserver goto語句的作用是什麼

Oracle和Microsoft SQL Server都有GOTO語句,但是語法不同。GOTO語句使Transact-SQL跳到指定的標號處運行,
在GOTO語句後指定標號之間的任何語句都不會被執行。
Oracle Microsoft SQL
GOTO label;
<> GOTO label

⑸ 如何在SQL Server中使用正則表達式

sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四個正則表達式函數。
1、regexp_like:
regexp_like(x,pattern[,match_option]),查看x是否與pattern相匹配,該函數還可以提供一個可選的參數match_option字元串說明默認的匹配選項。match_option的取值如下:
'c'
說明在進行匹配時區分大小寫(預設值);
'i'
說明在進行匹配時不區分大小寫;
'n'
(.)點號能表示所有單個字元,包括換行(俺還不知道什麼地方有用到換行.只知道sql裡面可以用chr(10)表示換行、
'm'
字元串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字元串最後的位置、
示例:
select
*
from
emp
where
regexp_like(ename,'^a[a-z]*n$');
可以查找ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認是區分大小寫.如果是
select
*
from
emp
where
regexp_like(ename,'^a[a-z]*n$','i')
則可以查找ename為Arwen的行記錄。
2、regexp_instr:
REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[,
match_option]]]])用於在x中查找pattern。返回pattern在x中出現的位置。匹配位置從1開始。可以參考字元串函數
INSTR(),參數相關:
'start'
開始查找的位置;
'occurrence'
說明應該返回第幾次出現pattern的位置;
'return_option'
說明應該返回什麼整數。若該參數為0,則說明要返回的整數是x中的一個字元的位置;若該參數為非0的整數,則說明要返回的整數為x中出現在pattern之後
的字元的位置;
'match_option'
修改默認的匹配設置.與regexp_like裡面的相同.
示例:
DECLARE
V_RESULT
INTEGER
;
BEGIN
SELECT
REGEXP_INSTR('hello
world','o',1,1,0)
INTO
V_RESULT
FROM
DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;
結果為5,即字母o第一個次出現的位置。
如果regexp_instr('hello
world','o',1,1,n)其中n為除0之外的整數。比如1,3。則結果為6.表示第一次出現字母o的後面一個字元的位置。
如果regexp_instr('hello
world','o',1,2,0)則結果為9.表示第二次出現字母o的位置.
3、regexp_replace:
REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[,
match_option]]]])用於在x中查找pattern,並將其替換為replae_string。可以參考字元串函數
REPLACE(),參數同REGEXP_INSTR函數
示例:
DECLARE
V_RESULT
varchar2(90);
BEGIN
SELECT
REGEXP_REPLACE('hello
world','o','x',1,1)
INTO
V_RESULT
FROM
DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;
結果為hellx
world.
如果REGEXP_REPLACE('hello
world','o','x'),則結果為hellx
wxrld.
如果
REGEXP_REPLACE('hello
world','o','x',1,2)則結果為hello
wxrld.
4、regexp_substr:
REGEXP_SUBSTR(x,pattern[,start[,occurrence[,
match_option]]])用於在x中查找pattern並返回。可以參考字元串函數
SUBSTR(),參數同REGEXP_INSTR函數.
例如:
DECLARE
V_RESULT
VARCHAR2(255);
BEGIN
SELECT
REGEXP_SUBSTR('hello
world','l{2}')
INTO
V_RESULT
FROM
DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END
;
結果為ll
查詢到匹配的字元串才返回匹配的字元.沒查到就返回空。

⑹ SQL無法停止伺服器 上的服務

你的用戶是administrator嗎是的話在administrators組里嗎
以上都正確的話
在系統服務里停止
停不了的話
確認一下
計算機名給有中文或其它字元
如果有的話在系統服務
雙擊mssql服務
修改啟動用戶
不要用system啟動
如果修改了啟動不起來的話在sql的安裝目錄重新分配許可權(要先在工具
文件夾選項里把簡單文件共享關掉
不然看不見安全選項卡)

⑺ 關於SQLSERVER的存儲過程的幾個題目..求解~!~~

1、
CREATE FUNCTION return_num
(@Class_Num varchar(20) )
RETURNS int
AS
BEGIN
RETURN ( select cout(*) from classmates where classnum=@Class_Num )
END

3、
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Database 資料庫名字' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Database 資料庫名字'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'備份資料庫名字',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'每天上午資料庫備份',
@category_name=N'Database 資料庫名字',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Daily Backup',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'declare @strDate nvarchar(max);
set @strDate = N''D:\DataBaseAutoBackup\資料庫名字_'' + Convert(nvarchar(8),getdate(),112) + N''.bak''

BACKUP DATABASE [資料庫名字] TO DISK = @strDate WITH NOFORMAT, NOINIT, NAME = N''資料庫名字_Dev-完整 資料庫 備份'', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO',
@database_name=N'master',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschele @job_id=@jobId, @name=N'Daily Backup',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20120510,
@active_end_date=99991231,
@active_start_time=50000,
@active_end_time=235959,
@schele_uid=N'f90cfdc3-cb5d-4e19-9e93-99b8921d36c0'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

⑻ SqlServer求幫建一個資料庫,100分!~

--直接執行
usemaster
go
ifexists(select*fromsysdatabaseswherename='UserDB')
dropdatabaseUserDB
go
createdatabaseUserDB
go
useUserDB
go
ifexists(select*fromsysobjectswherename='UserInfo')
droptableUserInfo
go
createtableUserInfo
(
CvNumberbigint,
Namevarchar(200),
Gendertinyint,
GenderStringvarchar(50),
Birthdaydate,
GoToWorkTypetinyint,
GoToWorkTypeStringvarchar(50),
StartingToWorkvarchar(50),
StartingToWorkStringvarchar(50),
CurrentCityvarchar(50),
CurrentCityStringvarchar(500),
MicroMottovarchar(max),
Phonevarchar(200)
)
go
useUserDB
go
ifexists(select*fromsysobjectswherename='UserLearnEcation')
droptableUserLearnEcation
go
createtableUserLearnEcation
(
(),
CvNumberbigint,
HighestEcationtinyint,
HighestEcationStringvarchar(50),
StartTimevarchar(10),
EndTimevarchar(10),
SchoolNameIdint,
SchoolNamevarchar(200),
SchoolRecordtinyint,
SchoolRecordStringvarchar(50),
ProNameint,
ProNameStringvarchar(100),
ProType1varchar(50),
ProType1Stringvarchar(100),
Collegevarchar(100),
UserClassvarchar(50)
)
go
useUserDB
go
ifexists(select*fromsysobjectswherename='UserWorkExp')
droptableUserWorkExp
go
createtableUserWorkExp
(
(),
CvNumberbigint,
CompanyNamevarchar(100),
StartTimevarchar(10),
EndTimevarchar(10),
JobTitlevarchar(100),
JobTypevarchar(50),
JobTypeStringvarchar(50)
)
go
useUserDB
go
ifexists(select*fromsysobjectswherename='UserInfoSa')
droptableUserInfoSa
go
createtableUserInfoSa--UserInfo已經存在了,第一張表就是,所以改了UserInfoSa
(
LocationPathvarchar(50),
LocationStringvarchar(100),
MinSalaryvarchar(10),
MaxSalaryvarchar(10),
PositionPathvarchar(50),
PositionStringvarchar(100)
)
go
useUserDB
go
ifexists(select*fromsysobjectswherename='UserLearnUniversityActivities')

go

(
(),
CvNumberbigint,
StudentOrgvarchar(50),
Positionsvarchar(100),
StartTimevarchar(10),
EndTimevarchar(10),
JobDescriptionvarchar(1000)
)
go

⑼ sqlserver 用命令如何導入導出表結構和表數據

平常從SQLSERVER中進行導入導出時,我們利用SQLSERVER中自帶的DTS轉換工具即可,很方便。但有些特殊的用法需要用語句進行導入導出,工作中碰到這種情況,查了些資料,下面詳細介紹:
一、從excel表導入到SQLSERVER use test go select * into test_table from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\11.xls;','select * from [結果$]') --1.通過Sql Server查詢分析器查詢D:\abc.xls 裡面表 sheet1 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\abc.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] --2.如果表a存在,並且表a的結構與上一步的查詢的結構一樣 可以使用 insert into a SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\abc.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] --3.如果表a不存在,使用into a SELECT * into a FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\abc.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 說明:test_table為SQLSERVER資料庫中的表,11.xls是EXCEL表,[結果$]是EXCEL表中的工作表,注意寫法是工作表名加上$符號。 2從SQLSERVER資料庫中導出到EXCEL(一般用語句導庫是在應用程序中,利用各種語言實現,如果不做開發項目,用DTS就很好了,在 SQLSERVER查詢器中利用單條SQL語句實現導入導出不方便,類型轉換是個問題,不好解決) 第一種,無法導入欄位名:(excel表不存在,新建) EXEC master..xp_cmdshell 'bcp zhou.dbo.資料庫表名 out "c:\test.xls" /c /S "伺服器名" /U "用戶名" -P "密碼" ' 第二種,excel文件已存在,要手工把表欄位名填到excel文件中去,再執行下面: insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 8.0;HDR=YES;DATABASE=c:\文件名.xls',sheet1$) select * from 表名 第三種,想實現全自動轉欄位名和記錄,一條語句實現不了,要用到過程,當然如果要做一個自動轉換程序,用VB或者VC語言也可實現。 把下面的過程全拷入SQLSERVER查詢分析器,執行,生成一個過程,過程名為:p_exporttb,然後按應用例子執行過程就OK了,自 動導表 /*******************************/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcere') = 1) drop procere [dbo].[p_exporttb] GO create proc p_exporttb @sqlstr varchar(8000), --查詢語句,如果查詢語句中使用了order by ,請加上top 100 percent @path nvarchar(1000), --文件存放目錄 @fname nvarchar(250), --文件名 @sheetname varchar(250)='' --要創建的工作表名,默認為文件名 as declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) --參數檢測 if isnull(@fname,'')='' set @fname='temp.xls' if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#') --檢查文件是否已經存在 if right(@path,1)<>'\' set @path=@path+'\' create table #tb(a bit,b bit,c bit) set @sql=@path+@fname insert into #tb exec master..xp_fileexist @sql --資料庫創建語句 set @sql=@path+@fname if exists(select 1 from #tb where a=1) set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE' +';CREATE_DB="'+@sql+'";DBQ='+@sql else set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES' +';DATABASE='+@sql+'"' --連接資料庫 exec @err=sp_oacreate 'adodb.connection',@obj out if @err<>0 goto lberr exec @err=sp_oamethod @obj,'open',null,@constr if @err<>0 goto lberr --創建表的SQL declare @tbname sysname set @tbname='##tmp_'+convert(varchar(38),newid()) set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a' exec(@sql) select @sql='',@fdlist='' select @fdlist=@fdlist+',['+a.name+']' ,@sql=@sql+',['+a.name+'] ' +case when b.name like '%char' then case when a.length>255 then 'memo' else 'text('+cast(a.length as varchar)+')' end when b.name like '%int' or b.name='bit' then 'int' when b.name like '%datetime' then 'datetime' when b.name like '%money' then 'money' when b.name like '%text' then 'memo' else b.name end FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp') and a.id=(select id from tempdb..sysobjects where name=@tbname) if @@rowcount=0 return select @sql='create table ['+@sheetname +']('+substring(@sql,2,8000)+')' ,@fdlist=substring(@fdlist,2,8000) exec @err=sp_oamethod @obj,'execute',@out out,@sql if @err<>0 goto lberr exec @err=sp_oadestroy @obj --導入數據 set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES ;DATABASE='+@path+@fname+''',['+@sheetname+'$])' exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']') set @sql='drop table ['+@tbname+']' exec(@sql) return lberr: exec sp_oageterrorinfo 0,@src out,@desc out lbexit: select cast(@err as varbinary(4)) as 錯誤號 ,@src as 錯誤源,@desc as 錯誤描述 select @sql,@constr,@fdlist go /*******************應用例子***************************/ p_exporttb @sqlstr='select * from 貸款大戶表' ,@path='c:\',@fname='aa.xls',@sheetname='貸款大戶表'

⑽ 如何在遠程sqlserver伺服器創建資料庫

一、創建新庫
/*
測試 在sql2005中通過查詢分析器,連接到sql2000,並創建了 tmpdb 庫:成功
p_CreateDB 'tmpdb1','data','sa','sa'
*/
-----------------------創建存儲過程開始--------------------
if object_id('p_CreateDB') is not null
drop procere p_CreateDB
go
CREATE PROCEDURE p_CreateDB
@Des_DB sysname, --目標資料庫
@ServerName sysname=N'', --伺服器名
@UserName sysname=N'', --用戶名,不指定則表示使用 Windows 身份登錄
@pwd sysname=N'' --密碼
AS
SET NOCOUNT ON
DECLARE @srvid int,--伺服器的對象
@dbsid int,
@Dbid int,--新建資料庫對象
@DBFile int,--新建資料庫DB文件
@LogFile int,--新建資料庫Log文件
@CmdStr nvarchar(4000)
declare @err int,@src varchar(255), @desc varchar(255) --錯誤處理變數

IF ISNULL(@ServerName,N'')=N'' SET @ServerName=@@ServerName --默認為本地資料庫
--創建sqldmo對象·
EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT
IF @err<>0 GOTO lb_Err
--連接伺服器
IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登錄
BEGIN
EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1
IF @err<>0 GOTO lb_Err
EXEC @err=sp_oamethod @srvid,'connect',NULL,@ServerName
END
ELSE
EXEC @err=sp_oamethod @srvid,'connect',NULL,@ServerName,@UserName,@pwd
IF @err<>0 GOTO lb_Err
--新資料庫對象創建
EXEC @err=sp_oacreate 'SQLDMO.Database',@Dbid OUT
IF @err<>0 GOTO lb_Err
EXEC @err=sp_oasetproperty @Dbid, 'Name',@Des_DB
IF @err<>0 GOTO lb_Err
/*
---這里可以設置數據文件與日誌文件的屬性,不寫就由sql server默認
--新資料庫DB文件對象創建,並設置屬性
EXEC @err=sp_oacreate 'SQLDMO.DBFile',@DBFile OUT
IF @err<>0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'Name','tmpfile'
IF @err<>0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'PhysicalName','c:/tmp.mdf'
IF @err<>0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'PrimaryFile','true'
IF @err<>0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'FileGrowthType',0
IF @err<>0 GOTO lb_Err
EXEC @err=sp_oasetproperty @DBFile, 'FileGrowth',1
IF @err<>0 GOTO lb_Err
--新資料庫對象加入DB文件
EXEC @err = sp_OAMethod @Dbid,'FileGroups.Item("primary").DBFiles.Add',null,@DBFile
IF @err<>0 GOTO lb_Err
--新資料庫LOG文件對象創建,並設置屬性
EXEC @err=sp_oacreate 'SQLDMO.LogFile',@LogFile OUT
IF @err<>0 GOTO lb_Err
EXEC @err=sp_oasetproperty @LogFile, 'Name','tmplg'
IF @err<>0 GOTO lb_Err
EXEC @err=sp_oasetproperty @LogFile, 'PhysicalName','c:/tmp.ldf'
--新資料庫對象加入DB文件
EXEC @err = sp_OAMethod @Dbid,'TransactionLog.LogFiles.Add',null,@LogFile
IF @err<>0 GOTO lb_Err
*/
--在伺服器上創建 新資料庫
EXEC @err = sp_OAMethod @srvid,'Databases.Add',null,@dbid
IF @err<>0 GOTO lb_Err
/*
EXEC @err= sp_OAGetProperty @srvid, 'Databases', @dbsid OUT
IF @err<>0 GOTO lb_Err
SET @CmdStr = 'Add'
EXEC @err = sp_OAMethod @dbsid,@CmdStr,null,@dbid
*/

--結束
SET @err=0
GOTO lb_Exit
--錯誤處理
lb_Err:
EXEC sp_oageterrorinfo NULL, @src OUT, @desc OUT
EXEC sp_OADestroy @LogFile
EXEC sp_OADestroy @DBFile
EXEC sp_OADestroy @Dbsid
EXEC sp_OADestroy @Dbid
EXEC sp_OADestroy @srvid
EXEC @err=sp_oamethod @srvid,'DisConnect'
RAISERROR(N'錯誤編號 %#x, 錯誤源 "%s", 錯誤描述 "%s"',16,1,@err,@src,@desc)
RETURN -1
lb_Exit:
EXEC sp_OADestroy @LogFile
EXEC sp_OADestroy @DBFile
EXEC sp_OADestroy @Dbsid
EXEC sp_OADestroy @Dbid
EXEC sp_OADestroy @srvid
EXEC @err=sp_oamethod @srvid,'DisConnect'
RETURN @err
GO