變數
用declare宣告乙個或多個變數,用set語句可以把乙個變數設定成指定的值。
declare @a as varchar(50);
set @a = 1
sql server2008新增了對同一語句宣告和賦值變數。
declare @b as int = 10;
set語句每次只能對乙個變數進行操作,所以如果要對多個變數賦值,就必須使用多次set語句。當從同一行取出不同的列的值時,可能會帶來不必要的開銷。
set @a = (select name from t_order where orderid = 1)
set @b = (select orderid from t_order where orderid = 1)
sql server還支援一種非標準的賦值
select
語句,允許在單獨的語句中既能查詢資料,又能把同一行的多個值賦值給多個變數。
select @a = name,@b = orderid
from t_order
where orderid = 1
標量子查詢:返回結果只有一行的子查詢。
批處理
批處理是客戶端應用程式傳送一條或多條t-sql語句到sql server,sql server將批處理語句作為單個可執行的單元。批處理要處理的階段有:分析,解析,優化。
sql server management studio提供了乙個客戶端命令go,可以發出一批t-sql語句結束的訊號。注意,go
是客戶端的工具,而不是
t-sql
的伺服器命令。
批處理是作為乙個單元而進行分析和執行的一組命令。如果分析成功,
sql server
接著會嘗試執行批處理。如果批處理中出現語法錯誤,整個批處理就不會提交到
sql server
執行。
變數是屬於定義它們的批處理的區域性變數,如果試圖引用在其他批處理中定義的變數,sql server引擎會提示引用的變數還未定義。
declare @a as int = 10;
print @a;
goprint @a;
go
不能在同一批處理和其他語句同時編譯的語句:create default,create function,create procedure,create rule,create scheme,create trigger及create view。
if object_id('v_shop','c') is not null drop table v_shop
gocreate view v_shop as
select * from t_shop
go
如果在同乙個批處理中既對資料物件進行了修改,又查詢了物件,那麼sql server可能還不知道架構發生了什麼變化,因而無法執行資料處理語句,報告解析錯誤。這種問題的解決方式是把
ddl語句和
dml語句分隔到不同的批處理中。
sql server2005對go這個客戶端工具,進行了增強,讓它可以支援乙個正整數引數,表示go之前的批處理將執行的次數。
create table #t(id int identity)
set nocount on; --防止dml輸出影響行數
insert into #t default values
go 100
select * from #t
bat 批處理變數
echo off setlocal enabledelayedexpansion d rem 更改d bat為當前目錄 cd d bat rem 變數使用 set a a 1 2 echo a echo cd echo date set p var 請輸入變數的值 echo var rem find...
批處理中處理變數延遲
rem 比較兩種異同 體會變數延遲 echo off set a 4 set a 5 echo a pause setlocal enabledelayedexpansion set c 4 set c 5 echo c pause批處理執行機制 批處理讀取命令按行讀取,在處理之前要完成必要的預處理...
批處理命令和變數
1。批處理命令 2。批處理變數及其型別 dos可以說是弱型別的 沒有像c語言那樣分得很細 你想一次ping遍區域網 可以這樣做 for l i in 1,1,255 do ping a 192.168.0.i 這樣就遍歷了從192.168.0.1到192.168.0.255這256個位址 注意這是在...