TOP字句加SQL變量的相關(guān)問(wèn)題
SQL Server數(shù)據(jù)庫(kù)中的變量可以加載TOP字句之后,下文將對(duì)TOP字句加SQL變量的相關(guān)問(wèn)題進(jìn)行討論,供您參考,希望對(duì)您學(xué)習(xí)SQL數(shù)據(jù)庫(kù)有所幫助。
SQL Server2005開(kāi)始,TOP子句后可以跟常量或者變量,跟常量時(shí)可省略括號(hào),即top(2)和top 2是等價(jià)的(注意不加括號(hào)時(shí)top和2間的空格),top后使用SQL變量時(shí)必須使用括號(hào),例:
Sql代碼
declare @num int
set @num = 10
select top(@num) * from sys.tables
declare @num int
set @num = 10
select top(@num) * from sys.tables
使用動(dòng)態(tài)SQL為:
Sql代碼
declare @num int
set @num = 10
declare @str nvarchar(1000)
set @str = 'select top('+cast(@num as nvarchar(10))+') * from sys.tables'
exec(@str)
declare @num int
set @num = 10
declare @str nvarchar(1000)
set @str = 'select top('+cast(@num as nvarchar(10))+') * from sys.tables'
exec(@str)
關(guān)于exec的一些備注:
1.使用exec命令時(shí),括號(hào)中只允許包含一個(gè)字符變量,或者一個(gè)字符串文本,或者字符串變量與字符串文本的串聯(lián)。不能在括號(hào)中使用函數(shù)或CASE表達(dá)式,所以最好將代碼放在一個(gè)變量中,再把此SQL變量作為exec命令的參數(shù)
2.exec(<string>)不提供接口,因此動(dòng)態(tài)批處理不能訪問(wèn)在調(diào)用批處理中定義的局部變量,必須把變量?jī)?nèi)容串聯(lián)到字符串中,就像上面的例子一樣。上面動(dòng)態(tài)SQL的例子如果寫(xiě)為 Sql代碼
set @str = 'select top('+@num +') * from sys.tables';
exec(@str)
set @str = 'select top('+@num +') * from sys.tables';
exec(@str)
則會(huì)報(bào)錯(cuò)
3.同樣的exec也不支持輸出參數(shù),如果要把輸入放進(jìn)一個(gè)SQL變量,必須先把輸入插入一個(gè)目標(biāo)表,然后再?gòu)哪繕?biāo)表例取值賦給該變量
【編輯推薦】




















