當前位置:首頁 » 編程語言 » tsql變數

tsql變數

發布時間: 2025-03-09 15:51:16

A. delphi中locate查找方法

TDataSet控制項以及它的繼承控制項,例如TSimpleDataSet/TClientDataSet等都可以使用Locate方法在結果數據集中查尋數據。程序首先必須使用sql命令從後端資料庫中取得數據並且形成結果數據集,然後才使用Locate方法查尋數據。

當使用Locate方法查尋數據時,開發人員可以使用任何的欄位條件來查尋,而無須理會這個欄位是不是索引欄位。當然,當開發人員使用索引欄位來查尋數據時,Locate會直接使用索引來幫助查尋,因此速度會非常快速。如果開發人員使用非索引欄位查尋數據,那麼Locate也將使用目前它知道最好的方式來查尋數據。

此外,Locate方法不只能夠查尋一個單一的欄位,它同時還能以數個欄位的條件來查尋數據。開發人員可以組合數個欄位的查尋條件在結果數據集中查尋數據。

由於Locate能夠查尋各種不同數據類型的欄位,因此Locate方法在設定查尋條件時是以Variant類型的變數來儲存查尋數值的。當開發人員要使用多個欄位來查尋數據時必須建立一個Variant數組來儲存查尋數值。

此外,Locate方法在查尋數據時也能夠使用模糊條件標准來尋找特定的數據,例如開發人員可以要求Locate在查尋數據時不分大小寫,或是以部分字元串來查尋數據,這樣就為開發人員提供了非常大的彈性空間。

下面就是Locate的方法原型:

function Locate(const KeyFields: String; const KeyValues: Variant;

Options: TLocateOptions): Boolean;

Locate方法接受三個參數。第一個參數KeyFields是開發人員要查尋的欄位名稱。如果開發人員要查尋單一欄位,那麼只需要直接傳入此欄位名稱。如果要以多個欄位條件來查尋,那麼便需傳入所有的欄位名稱,並且以分號分隔每一個欄位名稱。

第二個參數KeyValues是指開發人員欲查尋的條件數值。它的類型是Variant,因為Variant幾乎可以代表任何的類型,因此開發人員可以查尋整數、小數、字元串,或是布爾值的條件。同樣,如果開發人員只查尋一個條件數值,那麼就可以直接在這個參數位置傳入。如果是以多個欄位條件來查尋,那麼開發人員必須建立一個Variant數組,然後在這個數組中的每一個元素中指定條件數值,再傳遞Variant數組到這個參數中。至於Variant數組則可以使用VarArrayOf方法,或是使用VarArrayCreate方法來建立,在稍後的範例中會有程序代碼說明。

Locate方法的最後一個參數TLocateOptions則是讓開發人員在查尋字元串欄位時,指定以什麼標准來查尋數據。開發人員可以指明不分大小寫來查尋字元串數據,或是以部分字元串數值來查尋數據。下面就是TLocateOptions的類型定義:

type

TLocateOption = (loCaseInsensitive, loPartialKey);

TLocateOptions = setof TLocateOption;

在使用Locate時,如果使用loCaseInsensitive就代表不分大小寫查尋數據;如果使用loPartialKey就代表要以部分字元串來查尋數據。

Locate方法的回傳數值是布爾值,它代表Locate方法是否成功找到了要查尋的數據。如果找到,就回傳True,否則就回傳False。當Locate方法成功地查尋到數據之後,它就會移動目前的記錄位置到這筆數據上,否則就會停留在Locate開始查尋之前的記錄位置上。

請注意Locate方法查尋數據的結果是一筆數據,因此,如果你想查尋符合條件的一群數據,那麼你可以使用稍後將介紹的過濾器(Filter)功能。

現在,讓我們使用數個範例來說明如何使用Locate方法。下面的范常式序代碼即是以一個欄位來查尋數據,它是以數據表的NAME欄位來查尋擁有「李維」數值的這筆數據,由於最後一個參數是空集合,因此,這代表NAME欄位必須擁有一模一樣的「李維」這個數值才算查尋成功。

aSQLClientDataSet.Locate('NAME', '李維' , []);

下面的程序代碼則以City和District兩個欄位來查尋數據,查尋的條件是City欄位擁有「台北」數值,而District欄位擁有「大安區」數值的數據。

aSQLClientDataSet.Locate('City;District', VarArrayOf(['台北,大安區']),[]);

下面的程序代碼和第一個範例非常相像,只是這個程序代碼查尋的是第一筆在NAME欄位以「李」數值開頭的數據。

aSQLClientDataSet.Locate('NAME', '李', [loPartialKey]);

最後一個範例則是查尋ID欄位中任何以「A12」數值開頭的第一筆,而且是不分A大小寫的數據。

aSQLClientDataSet.Locate('ID', 'A12', [loCaseInsensitive ,loPartialKey]);

現在就讓我們使用Locate方法在範例應用程序中查尋數據。

單欄位查尋

首先讓我們以單一的欄位來展示如何查尋數據,稍後再說明如何以多個欄位查尋數據。現在請雙擊圖4-3中的【Locate】按鈕,並且在它的事件處理函數中撰寫如下的程序代碼:

dmSearchData.sqlcdsTest.Locate('SPECIES_NO', edtID.Text, [loCaseInsensitive, loPartialKey]);

這行程序代碼使用數據模塊中的TSimpleDataSet來查尋SPECIES_NO欄位中包含用戶在edtID這個TEdit控制項中輸入的數值。現在請執行這個範例應用程序,並且在主窗體右邊的TEdit控制項中輸入數值來查尋數據。例如圖4-4便是範例應用程序執行的畫面。當我們在TEdit控制項中輸入90100並且點擊【Locate】按鈕之後,TSimpleDataSet便會立刻找到並且把目前的記錄位置移動到這筆數據之上。

圖4-4 Locate找到90100這筆數據

使用Locate方法查尋單一欄位的數據是非常簡單的,現在再讓我們看看如何使用多個欄位來查尋數據。

多欄位查尋

請在Delphi中建立一個應用程序,並與上面的範例一樣建立一個數據模塊,並且傳入TSQLConnection、TSimpleDataSet,連接到相同的範例資料庫CHINESEDEMO.GDB。接著在主窗體中放入如圖4-5所示的控制項。在主窗體中我們使用了一個TComboBox,在這個TComboBox中將會填入範例數據表所有的欄位名稱,以便讓用戶可以自由選擇要使用來查尋的欄位。

另外,主窗體使用了一個TCheckListBox,它主要是用來儲存所有用戶輸入的查尋條件。當用戶在查尋欄位中選擇了一個欄位,然後在查尋數值中輸入了欲查尋的數值時,那麼就可以點擊主窗體中往下箭頭的按鈕把這個查尋條件加入到TCheckListBox中。當用戶輸入完所有查尋的條件之後,就可以點擊主窗體中的【Locate】按鈕以開始查尋數據。此時範例應用程序就會分析TCheckListBox中所有的查尋欄位和查尋數值,再調用Locate以多個欄位條件來查尋數據。

圖4-5 範例應用程序的主窗體

例如圖4-6就是這個範例應用程序執行的畫面。首先,當範例應用程序執行後,用戶便可以在TComboBox中選擇欲查尋的欄位,接著就可以在查尋數值控制項中輸入欲查尋的數值,接著點擊往下箭頭的按鈕,加入查尋條件到TCheckListBox中,或是點擊往上箭頭的按鈕,清除某一個查尋條件。

在TCheckListBox中的查尋條件是以:

查尋欄位名稱\查尋欄位數值

為格式儲存的,當用戶點擊了【Locate】按鈕之後就會從TCheckListBox中一一地取出查尋條件,並且分析出查尋欄位名稱以及查尋欄位數值,再放入到Locate方法的第一個以及第二個參數中。

圖4-6 執行範例應用程序的畫面

最後當輸入完所有的查尋條件之後,用戶就可以點擊主窗體中的【Locate】按鈕來查尋數據了。例如圖4-7便是我們查尋TOPOTYPE欄位包含「China」的數值,以及SPECIES_NAME欄位以O字母為開頭的數值。在點擊了【Locate】按鈕之後,範例應用程序調用Locate方法並且以多個欄位為查尋條件,果然立即找到了這筆數據。

圖4-7 以數個欄位條件來查尋數據

這個範例應用程序是如何運作的呢?這個範例的應用程序執行了下列的工作:

1. 程序啟動時在TComboBox中填入範例數據表所有的欄位名稱;

2. 點擊往下箭頭按鈕把查尋欄位和查尋數值加入到TCheckListBox中,以及點擊往上箭頭清除查尋條件;

3. 點擊【Locate】按鈕時從TCheckListBox中取出查尋條件,並且填入Locate方法的參數中,查尋數據。

現在就讓我們實現以上的工作。首先在範例應用程序啟動時,存取數據模塊中TSimpleDataSet的Field對象的FieldName特性值以取得欄位名稱,再填入TComboBox中:

procere TfrmMain.FormActivate(Sender: TObject);

var

iField : Integer;

begin

for iField := 0 to dmSearchData.sqlcdsTest.FieldCount - 1 do

begin

cbFields.Items.Add(dmSearchData.sqlcdsTest.Fields[iField].FieldName)

end;

cbFields.ItemIndex := 0;

end;

當點擊往下箭頭按鈕時,取出TComboBox中選擇的欄位名稱,以及查尋數值控制項中輸入的查尋數值,再檢查TCheckListBox中是否已經存在了這個查尋欄位,如果沒有,就將欄位名稱加欄位數值加入到TCheckListBox中。

此外,當點擊往上箭頭按鈕時,我們就刪除TCheckListBox中目前被選擇的查尋條件。

procere TfrmMain.sbtnAddClick(Sender: TObject);

begin

if (not AlreadyInCond(cbFields.Text)) then

begin

clbConditions.Items.Add(cbFields.Text + '\' + lblSearchValue.Text);

clbConditions.Checked[clbConditions.Count - 1] := True;

end;

end;

procere TfrmMain.sbtnDeleteClick(Sender: TObject);

begin

try

clbConditions.Items.Delete(clbConditions.ItemIndex);

except

on Exception do;

end;

end;

最後,當用戶點擊了主窗體中的【Locate】按鈕,範例應用程序就先檢查用戶是否輸入任何的查尋條件。如果有,就調用GetSerchFields從TCheckListBox中取出所有的查尋欄位名稱,然後調用GetSearchValues取得所有用戶輸入的查尋數值,最後調用Locate方法來查尋數據。

其中的GetSearchValues會先調用VarArrayCreate方法以建立一個Variant數組,再於這個Variant數組中一一輸入用戶的查尋數值。

procere TfrmMain.btnLocateClick(Sender: TObject);

var

sFields : String;

begin

lStart := GetTickCount;

if (CanSearch) then

begin

sFields := GetSerchFields;

dmSearchData.sqlcdsTest.Locate(sFields, GetSearchValues,
[loCaseInsensitive, loPartialKey]);

end;

lEnd := GetTickCount;

Self.Caption := FloatToStr((lEnd - lStart) /1000.0);

end;

function TfrmMain.GetSearchValues : Variant;

var

iCount : Integer;

sCond : String;

begin

Result := VarArrayCreate([0, Self.clbConditions.Items.Count - 1],
varVariant);;

for iCount := 0 to Self.clbConditions.Items.Count - 1 do

begin

sCond := Self.clbConditions.Items[iCount];

Result[iCount] := GetSearchValue(sCond);

end;

end;

function TfrmMain.GetSearchFields: String;

var

iCount : Integer;

sCond : String;

begin

Result := '';

for iCount := 0 to Self.clbConditions.Items.Count - 1 do

begin

sCond := Self.clbConditions.Items[iCount];

Result := Result + GetSearchField(sCond) + ';';

end;

Delete(Result, Length(Result), 1);

end;

function TfrmMain.CanSearch: Boolean;

begin

Result := Self.clbConditions.Items.Count > 0;

end;

function TfrmMain.GetSearchField(const sCond: String): String;

var

iPos : Integer;

begin

iPos := Pos('\', sCond);

Result := Copy(sCond, 1, iPos - 1);

end;

function TfrmMain.GetSearchValue(const sCond: String): String;

var

iPos : Integer;

begin

iPos := Pos('\', sCond);

Result := Copy(sCond, iPos + 1, Length(sCOnd) - iPos);

end;

function TfrmMain.AlreadyInCond(const sField: String): Boolean;

var

iCount : Integer;

sCond : String;

iPos : Integer;

begin

Result := False;

for iCount := 0 to clbConditions.Items.Count - 1 do

begin

sCond := clbConditions.Items[iCount];

iPos := Pos(sField, sCond);

if (iPos <> 0) then

begin

Result := True;

Break;

end;

end;

end;

上面的範例展示了如何使用Locate方法以多個欄位條件來查尋數據。由於Locate方法的第二個參數是Variant類型,因此,我們幾乎可以查尋任何類型的欄位。Locate方法非常適合在所有數據已經存在於結果數據集中的應用,但是對擁有大量記錄的數據表卻不見得適合,在稍後的小節中,本章會繼續討論如何使用Locate在大量的數據中查尋數據。

B. PL/SQL里 execute immediate的用法 誰給解釋下

execute 為SQL命令,意為執行存儲過程,immediate 為執行的存儲過程名稱。
以下摘自MsSql幫助,別怪我復制哦,實在是幫助里描述的才最全面。

EXECUTE
執行標量值的用戶定義函數、系統過程、用戶定義存儲過程或擴展存儲過程。同時支持 Transact-SQL 批處理內的字元串的執行

若要喚醒調用函數,請使用 EXECUTE stored_procere 中描述的語法。

語法
執行存儲過程:

[ [ EXEC [ UTE ] ]
{
[ @return_status = ]
{ procere_name [ ;number ] | @procere_name_var
}
[ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ]
[ ,...n ]
[ WITH RECOMPILE ]

執行字元串:

EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )

參數
@return_status

是一個可選的整型變數,保存存儲過程的返回狀態。這個變數在用於 EXECUTE 語句前,必須在批處理、存儲過程或函數中聲明過。

在用於喚醒調用標量值用戶定義函數時,@return_status 變數可以是任何標量數據類型。

procere_name

是擬調用的存儲過程的完全合法或者不完全合法的名稱。過程名稱必須符合標識符規則。有關更多信息,請參見使用標識符。無論伺服器的代碼頁或排序方式如何,擴展存儲過程的名稱總是區分大小寫。

用戶可以執行在另一資料庫中創建的過程,只要該用戶擁有此過程或有在該資料庫中執行它的適當的許可權。用戶可以在另一台運行 Microsoft® SQL Server™ 的伺服器上執行過程,只要該用戶有適當的許可權使用該伺服器(遠程訪問),並能在資料庫中執行該過程。如果指定了伺服器名稱但沒有指定資料庫名稱,SQL Server 會在用戶默認的資料庫中尋找該過程。

;number

是可選的整數,用於將相同名稱的過程進行組合,使得它們可以用一句 DROP PROCEDURE 語句除去。該參數不能用於擴展存儲過程。

在同一應用程序中使用的過程一般都以該方式組合。例如,在訂購應用程序中使用的過程可以 orderproc;1、orderproc;2 等來命名。DROP PROCEDURE orderproc 語句將除去整個組。在對過程分組後,不能除去組中的單個過程。例如,DROP PROCEDURE orderproc;2 是不允許的。有關過程組的更多信息,請參見 CREATE PROCEDURE。

@procere_name_var

是局部定義變數名,代表存儲過程名稱。

@parameter

是過程參數,在 CREATE PROCEDURE 語句中定義。參數名稱前必須加上符號 (@)。在以 @parameter_name = value 格式使用時,參數名稱和常量不一定按照 CREATE PROCEDURE 語句中定義的順序出現。但是,如果有一個參數使用 @parameter_name = value 格式,則其它所有參數都必須使用這種格式。

默認情況下,參數可為空。如果傳遞 NULL 參數值,且該參數用於 CREATE 或 ALTER TABLE 語句中不允許為 NULL 的列(例如,插入至不允許為 NULL 的列),SQL Server 就會報錯。為避免將 NULL 參數值傳遞給不允許為 NULL 的列,可以在過程中添加程序設計邏輯或採用默認值(使用 CREATE 或 ALTER TABLE 語句中的 DEFAULT 關鍵字)。

value

是過程中參數的值。如果參數名稱沒有指定,參數值必須以 CREATE PROCEDURE 語句中定義的順序給出。

如果參數值是一個對象名稱、字元串或通過資料庫名稱或所有者名稱進行限制,則整個名稱必須用單引號括起來。如果參數值是一個關鍵字,則該關鍵字必須用雙引號括起來。

如果在 CREATE PROCEDURE 語句中定義了默認值,用戶執行該過程時可以不必指定參數。如果該過程使用了帶 LIKE 關鍵字的參數名稱,則默認值必須是常量,並且可以包含 %、_、[ ] 及 [^] 通配符。

默認值也可以為 NULL。通常,過程定義會指定當參數值為 NULL 時應該執行的操作。

@variable

是用來保存參數或者返回參數的變數。

OUTPUT

指定存儲過程必須返回一個參數。該存儲過程的匹配參數也必須由關鍵字 OUTPUT 創建。使用游標變數作參數時使用該關鍵字。

如果使用 OUTPUT 參數,目的是在調用批處理或過程的其它語句中使用其返回值,則參數值必須作為變數傳遞(即 @parameter = @variable)。如果一個參數在 CREATE PROCEDURE 語句中不是定義為 OUTPUT 參數,則對該參數指定 OUTPUT 的過程不能執行。不能使用 OUTPUT 將常量傳遞給存儲過程;返回參數需要變數名稱。在執行過程之前,必須聲明變數的數據類型並賦值。返回參數可以是 text 或 image 數據類型以外的任意數據類型。

DEFAULT

根據過程的定義,提供參數的默認值。當過程需要的參數值沒有事先定義好的默認值,或缺少參數,或指定了 DEFAULT 關鍵字,就會出錯。

n

是佔位符,表示在它前面的項目可以多次重復執行。例如,EXECUTE 語句可以指定一個或者多個 @parameter、value 或 @variable。

WITH RECOMPILE

強制編譯新的計劃。如果所提供的參數為非典型參數或者數據有很大的改變,使用該選項。在以後的程序執行中使用更改過的計劃。該選項不能用於擴展存儲過程。建議盡量少使用該選項,因為它消耗較多系統資源。

@string_variable

是局部變數的名稱。@string_variable 可以是 char、varchar、nchar 或 nvarchar 數據類型,最大值為伺服器的可用內存。如果字元串長度超過 4,000 個字元,則把多個局部變數串聯起來用於 EXECUTE 字元串。有關系統提供的 SQL Server 數據類型更多的信息,請參見數據類型。

[N]'tsql_string'

是一個常量,tsql_string 可以是 nvarchar 或 varchar 數據類型。如果包含 N,則該字元串將解釋為 nvarchar 數據類型,最大值為伺服器的可用內存。如果字元串長度超過 4,000 個字元,則把多個局部變數串聯起來用於 EXECUTE 字元串。

注釋
如果過程名稱的前三個字元為 sp_,SQL Server 會在 Master 資料庫中尋找該過程。如果沒能找到合法的過程名稱,SQL Server 會尋找所有者名稱為 dbo 的過程。若要將存儲過程名稱解析為與系統存儲過程同名的用戶定義存儲過程,請提供一個完全合法的過程名稱。

參數可以通過利用 value 或 @parameter_name = value 來提供。參數不是事務的一個部分;因而如果事務中的參數值更改,且該事務在以後回滾,該參數值不會退回到以前的值。返回給調用方的值總是過程返回時的值。

當一個存儲過程調用另一個存儲過程時,會產生嵌套。當調用的過程開始執行時,嵌套級會增加,當調用過程執行結束時,嵌套級則會減少。嵌套級最高為32級,超過32級時,會導致整個調用過程鏈失敗。當前的嵌套級存儲在 @@NESTLEVEL 函數中。

SQL Server 目前使用返回值 0 到 -14 來表示存儲過程的執行狀態。值 –15 到 -99 留作後用。有關保留的返回狀態值的列表的更多信息,請參見 RETURN。

因為遠程存儲過程和擴展存儲過程不在事務的作用域中(除非在 BEGIN DISTRIBUTED TRANSACTION 語句中發出或者是和不同的配置選項一起使用),所以通過調用執行的命令不能回滾。有關更多信息,請參見系統存儲過程和 BEGIN DISTRIBUTED TRANSACTION。

當使用游標變數時,如果執行的過程傳遞一個分配有游標的游標變數,就會出錯。

在執行存儲過程時,如果語句是批處理中的第一個語句,則不一定要指定 EXECUTE 關鍵字。

使用帶字元串的 EXECUTE 命令
使用字元串串聯運算符 (+) 為動態執行創建長字元串。每個字元串表達式可以是 Unicode 與 non-Unicode 數據類型的混合。

盡管每個 [N] 'tsql_string' 或 @string_variable 不得超過 8,000 個位元組,SQL Server 語法分析器中對這種串聯只進行邏輯處理而不佔用物理內存。例如,該語句決不會生成長 16,000 個串聯起來的字元串:

EXEC('name_of_8000_char_string' + 'another_name_of_8000_char_string')

在 EXECUTE 語句執行前,不會編譯 EXECUTE 語句內的語句。

資料庫環境的更改只在 EXECUTE 語句結束前有效。例如,在這個例子的 EXEC 後,資料庫環境是 master:

USE master EXEC ("USE pubs") SELECT * FROM authors

許可權
存儲過程的 EXECUTE 許可權默認給該存儲過程的所有者,該所有者可以將此許可權轉讓給其他用戶。當遇到 EXECUTE 語句時,即使 EXECUTE 語句是在存儲過程中,也會檢查在 EXECUTE 字元串內使用該語句的許可權。當運行一個執行字元串的存儲過程時,系統會在執行該過程的用戶環境中,而不是在創建該過程的用戶環境中檢查許可權。但是,如果某用戶擁有兩個存儲過程,並且第一個過程調用第二個過程,則在第二個過程中不進行 EXECUTE 許可權檢查。

示例
A. 使用 EXECUTE 傳遞單個參數
showind 存儲過程需要參數 (@tabname),它是一個表的名稱。下面這個例子執行 showind 存儲過程,以 titles 為參數值。

說明 showind 存儲過程只是用來作為一個例子,pubs 資料庫並沒有此過程。

EXEC showind titles

在執行過程中變數可以顯式命名:

EXEC showind @tabname = titles

如果這是 isql 腳本或批處理中第一個語句,則 EXEC 語句可以省略:

showind titles

-或-

showind @tabname = titles

B. 使用多個參數與一個輸出參數
這個例子執行 roy_check 存儲過程,傳遞三個參數。第三個參數 @pc 是輸出參數。過程執行完後,返回變數可以從變數 @percent 得到。

說明 roy_check 存儲過程只是用作舉例,pubs 資料庫中並沒有此過程。

DECLARE @percent int
EXECUTE roy_check 'BU1032', 1050, @pc = @percent OUTPUT
SET Percent = @percent

C.使用帶一個變數的 EXECUTE 'tsql_string' 語句
這個例子顯示 EXECUTE 語句如何處理動態生成的、含有變數的字元串。這個例子創建 tables_cursor 游標來保存所有用戶定義表 (type = U) 的列表。

說明 此例子只用作舉例。

DECLARE tables_cursor CURSOR
FOR
SELECT name FROM sysobjects WHERE type = 'U'
OPEN tables_cursor
DECLARE @tablename sysname
FETCH NEXT FROM tables_cursor INTO @tablename
WHILE (@@FETCH_STATUS <> -1)
BEGIN
/* A @@FETCH_STATUS of -2 means that the row has been deleted.
There is no need to test for this because this loop drops all
user-defined tables. */.
EXEC ('DROP TABLE ' + @tablename)
FETCH NEXT FROM tables_cursor INTO @tablename
END
PRINT 'All user-defined tables have been dropped from the database.'
DEALLOCATE tables_cursor

D.使用帶遠程存儲過程的 EXECUTE 語句
這個例子在遠程伺服器 SQLSERVER1 上執行 checkcontract 存儲過程,在 @retstat 中保存返回狀態,說明運行成功或失敗。

DECLARE @retstat int
EXECUTE @retstat = SQLSERVER1.pubs.dbo.checkcontract '409-56-4008'

E. 使用帶擴展存儲過程的 EXECUTE 語句
下例使用 xp_cmdshell 擴展存儲過程列出文件擴展名為 .exe 的所有文件的目錄。

USE master
EXECUTE xp_cmdshell 'dir *.exe'

F. 使用帶一個存儲過程變數的 EXECUTE 語句
這個例子創建一個代表存儲過程名稱的變數。

DECLARE @proc_name varchar(30)
SET @proc_name = 'sp_who'
EXEC @proc_name

G. 使用帶 DEFAULT 的 EXECUTE 語句
這個例子創建了一個存儲過程,過程中第一個和第三個參數為默認值。當運行該過程時,如果調用時沒有傳遞值或者指定了默認值,這些默認值就會賦給第一個和第三個參數。注意 DEFAULT 關鍵字有多種使用方法。

USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'proc_calculate_taxes' AND type = 'P')
DROP PROCEDURE proc_calculate_taxes
GO
-- Create the stored procere.
CREATE PROCEDURE proc_calculate_taxes (@p1 smallint = 42, @p2 char(1),
@p3 varchar(8) = 'CAR')
AS
SELECT *
FROM mytable

proc_calculate_taxes 存儲過程可以以多種組合方式執行:

EXECUTE proc_calculate_taxes @p2 = 'A'
EXECUTE proc_calculate_taxes 69, 'B'
EXECUTE proc_calculate_taxes 69, 'C', 'House'
EXECUTE proc_calculate_taxes @p1 = DEFAULT, @p2 = 'D'
EXECUTE proc_calculate_taxes DEFAULT, @p3 = 'Local', @p2 = 'E'
EXECUTE proc_calculate_taxes 69, 'F', @p3 = DEFAULT
EXECUTE proc_calculate_taxes 95, 'G', DEFAULT
EXECUTE proc_calculate_taxes DEFAULT, 'H', DEFAULT
EXECUTE proc_calculate_taxes DEFAULT, 'I', @p3 = DEFAULT

C. 怎麼才能建立資料庫的自動備份機制.,越詳細越好//謝謝

sql server資料庫備份方案2008-08-05 13:15SQL Server 資料庫備份方案
為了保證SQL Server 數據的安全,資料庫管理員應定期備份資料庫,在不同情況下應採用不同備份資料庫備份策略,一方面維持數據的安全性,另一方面也可保持SQL Server 能順暢運行。盡最大的努力減少由於數據的損壞對客戶造成的損失。
概念
1) 備份工作規劃
計算機軟硬體的穩定性還未達到非常穩定的狀態,計算機中的數據仍有損失或毀壞的情況發生。存在於計算機內的數據不安全,即使採用容錯設備,也無法保證資料庫 100%安全。 計算機硬體的費用可能很高,但計算機數據更珍貴,做好數據備份,可保證在各種意外發生情況時,仍能保持有資料庫的完整性。 管理員必須花時間來備份資料庫,但 SQL SERVER也提供不少自動化功能。
2)備份方式
資料庫——完全
就是備份整個資料庫的內容。若將整個資料庫的內容都備份下來,需很多的存儲空間來存放備份數據,但其好處是在還原資料庫時,也只要將整個資料庫從一份資料庫備份還原到 SQL SERVER 中就可以了。它是其他備份的基礎,在做其他備份之前,必須得做此種方式的備份。
資料庫——差異 (Differential)
只備份從上一次執行「完全」資料庫備份後有改動的數據,因此所需要的備份時間和備份空間都比「完全」 方式少,所以此方式最適合作為經常性的備份方式。
事務日誌(Transaction Log)
只備份事務記錄文件的內容,由於事務日誌文件只會記錄我們在前一次資料庫備份或事務日誌記錄備份之後,對資料庫所做的變動過程,也就是只記錄某一段時間的資料庫變動情況,因此在做事務記錄備份之前,必須做一次「完全」的資料庫備份
文件和文件組:
如果資料庫的內容分散存儲於多個文件或文件組,而且資料庫已非常大,大到進行一次完整的資料庫備份會有時間和存儲空間上的問題。這時就可以使用此方式來備份資料庫的部分文件或文件組。由於每次只備份部分的文件或文件組,因此需做數次不同的備份才能完成整個資料庫的備份。才用此方式備份也有個好處,就是當毀壞的數據只是資料庫中的某個文件或文件組時,也只要還原壞的文件或文件組備份就可以了。
3)備份方案制訂原則
規劃資料庫的備份策略,需要考慮備份的各項變數,必須同時考慮到還原作業的進行。在做備份時,可考慮以下幾點。
(1) 有多少時間以及在那些時段可進行備份
(2) 資料庫變動的頻率如何
(3) 資料庫大小
(4) 當資料庫出問題時,用戶願意等待多久讓資料庫還原完畢
(5) 應採用何種備份方式,做怎樣的搭配
(6) 要使用哪種存儲介質

4)備份方案
(1)完全資料庫備份配合事務日誌備份
對於資料庫數據比較大,但每天的變動的內容小,可考慮採用此方式。可定期做一次完整的資料庫備份,例如:每周或每月做一次「完全」資料庫備份。然後再以較段短的周期,如每天或每兩天做一此事務日誌備份。這樣平時備份工作負擔比較輕,發生以外時,可將數據還原到最近期的狀態。
(2)完全資料庫備份配合差異式備份
此方式是將前一種方式中的事務日誌備份方式改成差異式備份。其優點是在做還原時,只需在做完最近一次資料庫備份的還原後,再用前一天的差異備份來還原就可以了,不像使用事務記錄備份時,需一天一天還原。缺點是在比較後的日子裡,每次做差異備份所需的時間和空間會增加。
(3)三種備份方式的綜合使用
由於事務記錄備份和差異備份各有其優缺點,因此我們可以將兩種方法結合起來使用。對於數據信息非常重要,每1、2小時備份一次,可能的損失只是1、2個小時的數據。
(4)當資料庫過大,有不易備份的問題時,可以採用文件或文件組備份方式,可考慮將資料庫分開存於不同的文件和文件組中,然後以文件和文件組的方式將整個資料庫分數次備份。此外,如果資料庫中只有部分表經常變動,另一部分很少變動,也可考慮將這兩部分存於不同的文件和文件組中,然後用不同的備份頻率來備份其內容。 採用此方式備份數據的缺點是:必須數次操作才能備份完數據。
(5)使用備用伺服器
採用此方式是再准備一台伺服器,先在原伺服器上做完全的備份,再把此備份放到備份伺服器上做還原,使兩邊的數據同步,以後可以定期對原資料庫做事務日誌備份,把事務日誌放到備份伺服器上還原。當原伺服器出現問題既可使用備份伺服器接上網路提供服務。

注意:系統資料庫的備份與還原是很多用戶在定義資料庫備份方案中容易忽略的,系統資料庫中雖然不保存業務數據,但它保存了很多SQL Server的設置,如果不備份系統資料庫,那麼在伺服器發生故障導致系統損壞時,重新配置所有的SQL Server設置將是一個噩夢DEMO
方案一 資料庫備份(常用方案)
在SQL Server備份窗口,可以通過調度設置,將當前進行的備份處理設置為定時自動處理的作用。具體的步驟如下:
1. 展開一個伺服器組。
2. 展開一個伺服器( SQL Server實例)。
3. 展開【資料庫】,右單擊要備份的資料庫,在彈出的菜單中選擇【所有任務】—〉【備份資料庫】命令。
4. 在隨後打開的SQL Server備份窗口中,設置備份的相關選項。參見前面的備份方案
單擊【常規】選項卡,在【調度】項中,選中【調度】復選框,然後單擊【調度】復選框後的【…】按鈕。在隨後出現的【編輯調度】對話框中,設置時間調度安排。
5. 設置完成後,單擊【確定】按鈕,SQL Server將執行備份操作,同時在【SQL Server 代理】—〉【作業 】中自動建立對應的作業。
6. 在【SQL Server 代理】—〉【作業 】窗口中,可以像處理普通作業一樣修改或刪除資料庫備份窗口中定義的備份計劃。
演示
方案二 數據轉換法(DTS)
具體的方案就是:
1.主伺服器和備份伺服器裝載完全一樣的操作系統和資料庫軟體,以及相應編制的管理軟體;
2.事先選定需要定期更新的表、視圖、存儲過程等等,必要時可選擇全部資料庫更新;
3.使用SQL Server 提供的數據轉換服務導入/ 導出向導(以SQL Server2000 為例) ,利用復制 SQL Server 對象任務,將 Microsoft SQL Server 對象從SQL Server 的一個實例復制到另一個SQL Server 中;
4.編輯反復出現的作業調度,確定發生的頻率和具體時間,一般情況下,由於數據量較大,不提倡每日發生多次,盡量安排在網路空餘時間發生。
這個方案優點是:
1.成本低、可靠性高,操作簡單,較易維護;
2.系統轉換時間短,備份系統替換主伺服器只需幾分鍾。即使出現意外,備份系統很快就會恢復正常,只損失少量數據,重新輸入即可;
3.本地和異地備份都是利用晚上網路空閑時間進行的,沒有增加日常網路流量,不會增加網路負擔。
注意選擇傳輸對象,相同版本的SQL Server 可以相互,或者由低版本向高版本SQL Server 備份,如:
SQL Server 7.0 的實例備份到 SQLServer 2000 的實例。
SQL Server 2000 的實例備份到另一個 SQL Server 2000 的實例。
備份的操作步驟:
1.打開企業管理器,選擇SQLServer 伺服器的資料庫,單擊滑鼠右鍵,選擇「所有任務」,並點選「導入數據」或「導出數據」。 如果是在主伺服器上進行操作,選導出數據;在備份伺服器上進行操作,則選導入數據。
2.第一步操作後,調出「數據轉換服務導入/ 導出向導」界面,單擊「下一步」,進入「DTS 導入/ 導出向導」的選擇數據源界面,選擇「目的」,選擇「制定表復制或查詢」,選擇要復制的對象。 弱
做選擇時,首先根據具體的客戶端選擇數據源,如果是OLE DB客戶端,選擇「用於SQL Server的Microsoft提供的OLEDB 程序」。
然後選擇提供數據源的伺服器,接下來選擇進入資料庫的方式,可選擇「使用Windows 身份驗證」或「使用SQL Server 身份驗證」。 如果選「使用SQL Server 身份驗證」,須填寫SQL Server 認可並對數據有修改權的用戶,一般可選「SA」及其密碼。最後選擇要復制的資料庫。
3.在「制定表復制和查詢」中,選擇「在SQL Server資料庫之間復制對象和數據」,然後單擊下一步。選擇具體復制對象和相應的選項等等.。
4.通過保存調度和復制包,定製進行復制的時間和頻率。
5.全部設置完成後,提示會列出源、目的、採用的方式、資料庫等選項,由你確認完成。
6.如果設置結束後要進行定製時間修改,在企業管理器中,通過伺服器、資料庫、管理、SQL server 代理、作業,然後選擇具體的作業,調出界面進行修改。
至此,你就可以在自己的中小企業環境中,輕松實現多台資料庫伺服器間的定時自動數據備份了。
演示
方案三 資料庫維護計劃+X命令(推薦使用)
1. 展開一個伺服器組
2. 展開一個伺服器實例(SQL Server實例)。
3. 展開【管理】,右擊【資料庫維護計劃】,在彈出的快捷菜單中選擇【新建維護計劃】命令。
4. 在隨後出現的【資料庫維護計劃 —(Local)】對話框中,單擊【下一步】按鈕跳過歡迎頁,在接下來的【選擇資料庫】步驟中,定義要備份的資料庫。
5. 單擊【下一步】按鈕,跳過與資料庫備份無關的步驟,在【指定資料庫備份計劃】步驟中,選擇【作為維護計劃的一部分來備份資料庫】復選框;通過單擊【磁帶】或者【磁碟】單選按鈕來選擇備份設備;單擊【調度】選項右邊的【更改】按鈕,可以在隨後出現的【編輯反復出現的作業調度】對話框中設置維護計劃的時間安排。
6. 單擊【下一步】按鈕,如果在步驟(5)中,備份設備選擇的是【磁碟】設備,則會進入【指定備份磁碟目錄】步驟,根據實際情況,設置此步驟中的內容。
7. 單擊【下一步】按鈕,進入【指定事務日誌備份計劃】步驟,如果需要進行事務日誌備份,則選擇【作為維護計劃的一部分來備份事務日誌】復選框。備份事務日誌的其他設置步驟參考(5)~(6)。
8. 根據需要設置其他步驟,最後進入【正在完成資料庫維護計劃向導】步驟,設置好【計劃名】,單擊【完成】按鈕完成資料庫維護計劃的定義。
9. 完成步驟(1)~(8)後,單擊【資料庫維護計劃】,在企業管理器控制台右邊的詳細信息窗口中就可以看到定義好的資料庫維護計劃,同時,展開【SQL Server代理】—〉【作業】,可以【作業】右邊的詳細窗口中,可以看到維護計劃自動建立的備份出路作業。
10. 通過有機維護計劃,選擇【屬性】命令,可以修改已經定義的維護計劃。
11. 通過右擊維護計劃,選擇【刪除】命令,可以刪除已經定義的維護計劃,同時【SQL Server 代理】—〉【作業】中的相關作業也會自動刪除。
新建一個批文件 Copy.bat具體腳本如下:
@echo off
title 正在傳輸資料庫備份文件到遠程備份伺服器上!
echo 提示:開始驗證伺服器上是否存在備份文件!
echo 請稍候!
if exist F:\DBback\*.bak (goto Process ) else goto UnFound
:Process
echo 提示:在伺服器上找到了備份文件!
echo -------------------------------------------------------------------------------
echo 提示:開始刪除遠程備份伺服器上的原始文件!

rem 備註:下列IP地址為遠程備份伺服器的IP地址!
del \\192.168.244.24\DBback /q /s /f
del \\192.168.244.24\DBback\*.* /q /s /f
if errorlevel 0 goto success
:success
echo 提示:成功刪除原始文件!
echo -------------------------------------------------------------------------------
echo 提示:開始復制資料庫備份文件到遠程備份伺服器\\192.168.244.24\DBback!
echo 請稍候!
rem 備註:請具體更改\\192.168.244.1\DBback為伺服器備份文件存放的位置。\\192.168.244.24\DBback為備份伺服器上存放的位置!
x \\192.168.244.1\DBback \\192.168.244.24\DBback /y /f
rem 備註:當X命令結束後返回的Errorlevel為4說明磁碟控制項不足。當X命令返回0時說明成功完成操作!
if errorlevel 4 goto lowmemory
if errorlevel 0 goto showmessage
:lowmemory
echo 警告:請查看磁碟空間是否不足!

:UnFound
echo 警告:在伺服器上找不到備份文件,批任務將要結束。伺服器備份工作似乎沒有正常進行,請確認伺服器是否正常生成備份文件!
goto exit

:showmessage
echo 提示:批任務完成!
echo 提示:成功復制資料庫備份到遠程伺服器\\192.168.244.24\DBback!
echo 按任意鍵結束退出!
echo --------------------------------------------------------------------------------
:exit
pause
echo 成功復制PersonnelM資料庫備份到遠程伺服器\\192.168.244.24\1上!
Pause

利用Windows 任務計劃來調度批任務
1. 單擊「開始」—〉「程序」—〉「附件」—〉「系統工具」—〉「任務計劃」
2. 雙擊「新建任務計劃」,彈出「任務計劃向導」單擊「下一步」。在選擇任務窗體中選擇「瀏覽」。我們選擇要調度執行的Copy.bat文件。
3. 在接下來彈出的窗體中為我們的任務計劃起個名稱並且選擇執行頻率。這里我們選擇「每天」
4. 在密碼確認窗體中輸入本機的密碼。單擊「下一步」選擇「完成」。至此任務計劃設置完成。(有需要的話可以單擊選擇「在單擊完成時,打開此任務的高級屬性」復選框以便對此任務進行高級設置!)

方案四 同步備份伺服器(腳本)
/*該部分參考了鄒建的腳本*/
/*--說明:
下面的代碼演示了如何利用日誌還原功能,將主資料庫中的數據變化及時反饋到備用資料庫中
備用資料庫的數據可以隨時用於查詢,但不能被更新(備用資料庫只讀)。
--*/
--首先,創建一個演示用的資料庫(主資料庫)
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA,
FILENAME = 'c:\Db_test.mdf' )
LOG ON
( NAME = Db_test_LOG,
FILENAME = 'c:\Db_test.ldf')
GO
--對資料庫進行備份
BACKUP DATABASE Db_test TO DISK='c:\test_data.bak' WITH FORMAT
GO
--把資料庫還原成備用資料庫(演示主資料庫與這個備用資料庫之間的同步)
RESTORE DATABASE Db_test_bak FROM DISK='c:\test_data.bak'
WITH REPLACE,STANDBY='c:\db_test_bak.ldf'
,MOVE 'Db_test_DATA' TO 'c:\Db_test_data.mdf'
,MOVE 'Db_test_LOG' TO 'c:\Db_test_log.ldf'
GO
--啟動 SQL Agent 服務
EXEC master..xp_cmdshell 'net start sqlserveragent',no_output
GO
--創建主伺服器數據訓與備用伺服器資料庫之間同步的作業
DECLARE @jogid uniqueidentifier
EXEC msdb..sp_add_job
@job_id = @jogid OUTPUT,
@job_name = N'數據同步處理'
--創建同步處理步驟
EXEC msdb..sp_add_jobstep
@job_id = @jogid,
@step_name = N'數據同步',
@subsystem = 'TSQL',
@command = N''
--主資料庫中進行日誌備份
BACKUP LOG Db_test TO DISK="c:\test_log.bak" WITH FORMAT
--備用資料庫中還原主資料庫的日誌備份(應用主資料庫中的最新變化
--實際應該時主資料庫備份與備用資料庫的還原作業應該分別在主伺服器和備用伺服器上建立,並且備份文件應該放在主伺服器和備用都能訪問的共享目錄中
RESTORE LOG Db_test_bak FROM DISK='c:\test_log.bak' WITH STANDBY='c:\test_log.ldf',
@retry_attempts = 5,
@retry_interval = 5
--創建調度(每分鍾執行一次)
EXEC msdb..sp_add_jobschele
@job_id = @jogid,
@name = N'時間安排',
@freq_type=4,
@freq_interval=1,
@freq_subday_type=0x4,
@freq_subday_interval=1,
@freq_recurrence_factor=1
-- 添加目標伺服器
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jogid,
@server_name = N'(local)'
GO

--通過上述處理,主資料庫與備用資料庫之間的同步關系已經設置完成
--下面開始測試是否能實現同步
--在主資料庫中創建一個測試用的表
CREATE TABLE Db_test.dbo.TB_test(ID int)
GO
--等待1分鍾30秒(由於同步的時間間隔設置為1分鍾,所以要延時才能看到效果)
WAITFOR DELAY '00:01:30'
GO
--查詢一下備用資料庫,看看同步是否成功
SELECT * FROM Db_test_bak.dbo.TB_test
/*--結果:
ID
-----------
(所影響的行數為 0 行)
--*/
--測試成功
GO

--最後刪除所有的測試
DROP DATABASE Db_test,Db_test_bak
EXEC msdb..sp_delete_job @job_name=N'數據同步處理'
GO
/*===========================================================*/
/*--伺服器宕機處理說明
使用這種方式建立的資料庫同步,當主資料庫不可用時(例如,主資料庫損壞或者停機檢修)
可以使用以下兩種方法使備用資料庫可用。
--*/
--1. 如果主資料庫損壞,無法備份出最新的日誌,可以直接使用下面的語句使備用資料庫可讀寫(丟失最近一次日誌還原後的所有數據)。
RESTORE LOG Db_test_bak WITH RECOVERY
--2. 如果主資料庫可以備份出最新日誌,則可以使用下面的語句。
--先備份主資料庫的最新的事務日誌
BACKUP LOG Db_test TO DISK=''c:\test_log.bak'' WITH FORMAT
--再在備用資料庫中恢復最新的事務日誌,並且使備用資料庫可讀寫(升級為主資料庫)
RESTORE LOG Db_test_bak FROM DISK='c:\test_log.bak'

方案五 復制訂閱
開始學習之前我們先搞清楚以下幾個概念:
復制(Replication)就是將數據由某處復制到一個或多個目的地,由於對資料庫分散式應用的需求日漸增加,SQL Sever也提供了復制的功能。
SQL Server 的復制功能基本上是使用「發布伺服器(Publisher) 」和「訂閱伺服器」(Subscriber)的結構,這整個結構中包含了數個不同的組件。
(1) 發布伺服器(Publisher):在復制中,發布伺服器就是負責發布資料庫內容給其他伺服器的SQL Server (一般的我們把主伺服器當作發布伺服器,形象一點比喻發布伺服器就好像是一本書的作者)
(2) 訂閱伺服器(Subscriber):訂閱伺服器就是指受發布伺服器所發布數據的SQL SERVER,通常發布伺服器只有一個,但訂閱伺服器可以有多個。(形象比喻訂閱服務就像是讀者,購買相同圖書的讀者可以有很多。)
(3) 分發伺服器(Distributor):除了發布伺服器和訂閱伺服器這兩個基本外,另一個可以由 SQL SERVER 在整個復制結構中扮演的角色就是分發伺服器。分發伺服器是負責將發布伺服器所發布的資料庫發布、傳輸到各訂閱伺服器的伺服器。在簡單的復制結構中,發布伺服器和分發伺服器通常是使用同一個 SQL SERVER。設置為分發伺服器的 SQL SERVER,會有個名為 distribution 的系統資料庫存放復制信息。
(4) 發布項(Article):發布伺服器所發布的數據稱為發布項,發布項是進行復制時的復制單位,發布項可以是表或存儲過程等資料庫對象,也可以知識表中的某幾列或某幾項數據。
(5) 發布(Publish):一組特定的發布項組合就稱為發布,也就是 SQL SERVER進行復制時所復制的數據合。當訂閱伺服器向發布伺服器訂閱數據時,是以發布為單位,而不是以發布項為單位的。即,訂閱伺服器只能接收整個發布中的所有 article。而不能只選擇其中幾個發布項類訂閱,每個發布只有來自單一資料庫的內容,但我們可以為資料庫設置多個發布。
(6) 為適應不同的復制需求,SQL SERVER提供了發送(Push)和請求(Pull)兩種不同的訂閱方式。區別如下:
(a) 發送訂閱(Push Subscription也稱為強制訂閱):所謂的發送訂閱就是由發布伺服器主動傳送發布給訂閱伺服器,也就是由發布伺服器控制復制的操作,只要指定進行復制的時間一到,不管訂閱伺服器有沒有提出要求,發布伺服器都會將數據傳送給訂閱伺服器。
(b) 請求訂閱(Pull Subscription):請求訂閱和發送訂閱相反,是由訂閱伺服器自行根據排定的日程向發布伺服器要求訂閱發布,通常在訂閱伺服器數量較多,或是不需要即時取的最新的數據內容時,可採用此種訂閱方式。

步驟:
下介紹實現復制的步驟。(以快照復制為例)
准備工作:
1.發布伺服器,訂閱伺服器都創建一個同名的windows用戶,並設置相同的密碼,做為發布快照文件夾的有效訪問用戶
--我的電腦
--控制面板
--管理工具
--計算機管理
--用戶和組
--右鍵用戶
--新建用戶
--建立一個隸屬於administrator組的登陸windows的用戶
2.在發布伺服器上,新建一個共享目錄,做為發布的快照文件的存放目錄,操作:
我的電腦--D:\ 新建一個目錄,名為: BakPUB
--右鍵這個新建的目錄
--屬性--共享
--選擇"共享該文件夾"
--通過"許可權"按紐來設置具體的用戶許可權,保證第一步中創建的用戶具有對該文件夾的所有許可權
--確定

3.設置SQL代理(SQLSERVERAGENT)服務的啟動用戶(發布/訂閱伺服器均做此設置)
開始--程序--管理工具--服務
--右鍵SQLSERVERAGENT
--屬性--登陸--選擇"此賬戶"
--輸入或者選擇第一步中創建的windows登錄用戶名
--"密碼"中輸入該用戶的密碼
4.設置SQL Server身份驗證模式,解決連接時的許可權問題(發布/訂閱伺服器均做此設置)
企業管理器
--右鍵SQL實例--屬性
--安全性--身份驗證
--選擇"SQL Server 和 Windows"
--確定
5.在發布伺服器和訂閱伺服器上互相注冊
企業管理器
--右鍵SQL Server組
--新建SQL Server注冊...
--下一步--可用的伺服器中,輸入你要注冊的遠程伺服器名--添加
--下一步--連接使用,選擇第二個"SQL Server身份驗證"
--下一步--輸入用戶名和密碼
--下一步--選擇SQL Server組,也可以創建一個新組
--下一步--完成
6.對於只能用IP,不能用計算機名的,為其注冊伺服器別名
(在連接端配置,比如,在訂閱伺服器上配置的話,伺服器名稱中輸入的是發布伺服器的IP)
開始--程序--Microsoft SQL Server--客戶端網路實用工具
--別名--添加
--網路庫選擇"tcp/ip"--伺服器別名輸入SQL伺服器名
--連接參數--伺服器名稱中輸入SQL伺服器ip地址
--如果你修改了SQL的埠,取消選擇"動態決定埠",並輸入對應的埠號
==============================================================================
正式開始:
1.配置發布伺服器
a. 選中指定 [伺服器] 節點
b. 從 [工具] 下拉菜單的 [復制] 子菜單中選擇 [發布、訂閱伺服器和分發] 命令
c. 系統彈出一個對話框點 [下一步] 然後看著提示操作
--直到"指定快照文件夾"
--在"快照文件夾"中輸入准備工作中創建的目錄: \\<伺服器名>\ BakPUB
一[下一步] 直操作到完成。
d. 當完成了出版伺服器的設置以後系統會為該伺服器的樹形結構中添加一個復制監視器
同時也生成一個分發資料庫(distribution)

---------------------------------------------------------------------------
2.創建發布
a. 選中指定的伺服器
b. 從 [工具] 菜單的 [復制] 子菜單中選擇 [創建和管理發布] 命令。此時系統會彈出
一個對話框
c. 選擇要創建發布的資料庫,然後單擊 [創建發布]
d. 在 [創建發布向導] 的提示對話框中單擊 [下一步] 系統就會彈出一個對話框。對話
框上的內容是復制的三個類型。我們現在選第一個也就是默認的快照發布(其他兩個
大家可以去看看幫助)
e. 單擊 [下一步] 系統要求指定可以訂閱該發布的資料庫伺服器類型,SQLSERVER允許在
不同的資料庫如 ORACLE或ACCESS之間進行數據復制。但是在這里我們選擇運行
"SQL SERVER 2000"的資料庫伺服器
f. 單擊 [下一步] ,選擇要發布的對象(如表,視圖,存儲過程,一般是表)
g. 然後 [下一步] 直到操作完成。當完成出版物的創建後創建出版物的資料庫也就變成了
一個共享資料庫。

---------------------------------------------------------------------------
3.設計訂閱
a. 選中指定的訂閱伺服器
b. 從 [工具] 下拉菜單中選擇 [復制] 子菜單的 [請求訂閱]
c. 按照提示單擊 [下一步] 操作直到系統會提示檢查SQL SERVER代理服務的運行狀態,執行
復制操作的前提條件是SQL SERVER代理服務必須已經啟動。
d. 單擊 [完成] 完成訂閱操作。

----------------------------------------------------------------------------
完成上面的步驟其實復制也就是成功了。但是如何來知道復制是否成功了呢?
這里可以通過這種方法來快速看是否成功。
展開出版伺服器下面的復制——發布內容——右鍵發布內容——屬性——擊活——狀態然後點立即運行代理程序接著點代理程序屬性擊活調度
把調度設置為每一天發生,每一分鍾,在0:00:00和23:59:59之間。
接下來就是判斷復制是否成功了打
開C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\下面
看是不是有一些以時間做為文件名的文件夾差不多一分中就產生一個。

D. sql中的 raiserror什麼意思啊

RAISERROR
返回用戶定義的錯誤信息並設系統標志,記錄發生錯誤。通過使用 RAISERROR 語句,客戶端可以從 sysmessages 表中檢索條目,或者使用用戶指定的嚴重度和狀態信息動態地生成一條消息。這條消息在定義後就作為伺服器錯誤信息返回給客戶端。

語法
RAISERROR ( { msg_id | msg_str } { , severity , state }
[ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]

參數
msg_id

存儲於 sysmessages 表中的用戶定義的錯誤信息。用戶定義錯誤信息的錯誤號應大於 50,000。由特殊消息產生的錯誤是第 50,000 號。

msg_str

是一條特殊消息,其格式與 C 語言中使用的 PRINTF 格式樣式相似。此錯誤信息最多可包含 400 個字元。如果該信息包含的字元超過 400 個,則只能顯示前 397 個並將添加一個省略號以表示該信息已被截斷。所有特定消息的標准消息 ID 是 14,000。

msg_str 支持下面的格式:

% [[flag] [width] [precision] [{h | l}]] type

可在 msg_str 中使用的參數包括:

flag

用於確定用戶定義的錯誤信息的間距和對齊的代碼。

可以查閱一下SQL SERVER的聯機叢書(在安裝了MSSQL的開始菜單里可以查到)

熱點內容
湖南學安卓哪裡好 發布:2025-03-10 02:40:50 瀏覽:648
伺服器rmc是什麼版本 發布:2025-03-10 02:31:08 瀏覽:473
外部存儲器的空間不足 發布:2025-03-10 02:15:43 瀏覽:460
伺服器怎麼練 發布:2025-03-10 02:14:00 瀏覽:569
ipad忘了id賬號密碼怎麼辦 發布:2025-03-10 02:07:16 瀏覽:471
電腦和伺服器有啥區別啊 發布:2025-03-10 01:59:54 瀏覽:990
股票應該怎麼板塊配置 發布:2025-03-10 01:59:08 瀏覽:223
天正建築編譯菜單文件一直在載入 發布:2025-03-10 01:47:37 瀏覽:567
長安cx70自動擋有哪些配置 發布:2025-03-10 01:35:54 瀏覽:991
百灑存儲 發布:2025-03-10 01:35:43 瀏覽:947