SQL Server變數與批處理

2021-08-22 11:30:36 字數 1869 閱讀 6857

變數

用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個位址 注意這是在...