普通SQL語句可以用Exec執行

2021-09-07 07:38:18 字數 2065 閱讀 7373

例如儲存過名為:myprocedure

use adventureworks  

create procedure myprocedure @city varchar(20)  

as  

begin  

select * from person.address  

end  

exec myprocedure @city = 'bothell'  

--或  

exec myprocedure 'bothell'  

注意:動態的sql必須包含於圓括號內如:

exec ('select * from mytable')  

使用exec執行動態sql語句注意下面問題

1.不能有輸入引數,輸出引數

下面的指令碼是錯誤的:

declare @i as int;  

set @i = 10248;  

declare @sql as varchar(52);  

set @sql = 'select * from dbo.orders where orderid = @i;';  

exec(@sql);  

go  

2.園括號內部能使用函式或case表示式

下面的指令碼是錯誤的:

declare @schemaname as nvarchar(128), @tablename as nvarchar(128);  

set @schemaname = n'dbo';  

set @tablename = n'order details';  

exec(n'select count(*) from '  

+ quotename(@schemaname) + n'.' + quotename(@tablename) + n';');  

go  

不過把函式放在變數中是可以的:

declare  

@schemaname as nvarchar(128),  

@tablename as nvarchar(128),  

@sql as nvarchar(539);  

set @schemaname = n'dbo';  

set @tablename = n'order details';  

set @sql = n'select count(*) from '  

+ quotename(@schemaname) + n'.' + quotename(@tablename) + n';'  

exec(@sql);  

3.不能利用重用執行計畫,存所以存在效能問題

declare @i as int;  

set @i = 10248;  

declare @sql as varchar(52);  

set @sql = 'select * from dbo.orders where orderid = '  

+ cast(@i as varchar(10)) + n';';  

exec(@sql);  

go  

當@i = 10248, 10249, 10250要生成3個執行計畫。

4。容易被sql注入,存在安全問題。

declare @lastname as nvarchar(40), @sql as nvarchar(200);  

set @lastname = n''' drop table dbo.employees --';  

set @sql = n'select * from dbo.employees where lastname = '''  

+ @lastname + ''';';  

exec @sql;  

go  

實際執行的sql為:

select * from dbo.employees where lastname = '' drop table dbo.employees --';  

goto語句 慎用,但是可以用

最近使用了goto語句,是因為if巢狀太深了,因此把錯誤處理同意了,直接使用goto語句。舉例 include int main printf value of a d n a a while a 20 loop printf aa d n a printf loop d n a a 4 print...

網域名稱可以用多久 假髮可以用多久?

這要看你說的是哪種假髮了,像是真人發手工鉤織的假髮一般保養好的話,用3 5年都是可以的,因為真人發只要定期噴灑護理液保持頭髮養分是可以用很長時間的,如果是纖維發這種假髮基本上戴個半年就完全沒法用了,很容易炸毛,打理起來也很麻煩的。所以如果打算長期佩戴建議還是選擇真人發手工鉤織的假髮吧,效果會更好!附...

網域名稱可以用多久 織髮髮套可以用多久?

織髮髮套屬於純手工鉤織的假髮,純手工鉤織的假髮正常的壽命是三到五年,新的時候狀態較好,髮型比較真實自然,舊了以後髮型較呆板,真實度稍差一些。也跟平時佩戴習慣 保養習慣有關。經常風吹日曬可能會縮短使用壽命,經常辦公室工作佩戴 加上洗護正確方式可以適當延長使用壽命,因人而異!織髮髮套使用壽命還是比較長久...