例如儲存過名為: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年都是可以的,因為真人發只要定期噴灑護理液保持頭髮養分是可以用很長時間的,如果是纖維發這種假髮基本上戴個半年就完全沒法用了,很容易炸毛,打理起來也很麻煩的。所以如果打算長期佩戴建議還是選擇真人發手工鉤織的假髮吧,效果會更好!附...
網域名稱可以用多久 織髮髮套可以用多久?
織髮髮套屬於純手工鉤織的假髮,純手工鉤織的假髮正常的壽命是三到五年,新的時候狀態較好,髮型比較真實自然,舊了以後髮型較呆板,真實度稍差一些。也跟平時佩戴習慣 保養習慣有關。經常風吹日曬可能會縮短使用壽命,經常辦公室工作佩戴 加上洗護正確方式可以適當延長使用壽命,因人而異!織髮髮套使用壽命還是比較長久...