1. 程式人生 > >動態sql語句基本語法--Exec與Exec sp_executesql 的區別

動態sql語句基本語法--Exec與Exec sp_executesql 的區別

動態sql語句基本語法   
1   :普通SQL語句可以用Exec執行   

eg:       Select   *   from   tableName   
                  Exec( 'select   *   from   tableName ')   
                  Exec   sp_executesql   N 'select   *   from   tableName '         --   請注意字串前一定要加N   

2:欄位名,表名,資料庫名之類作為變數時,必須用動態SQL   

eg:       
declare   @fname   varchar(20)   
set   @fname   =   'FiledName '   
Select   @fname   from   tableName                             --   錯誤,不會提示錯誤,但結果為固定值FiledName,並非所要。   
Exec( 'select   '   +   @fname   +   '   from   tableName ')           --   請注意   加號前後的   單引號的邊上加空格   

當然將字串改成變數的形式也可   
declare   @fname   varchar(20)   
set   @fname   =   'FiledName '   --設定欄位名   

declare   @s   varchar(1000)   
set   @s   =   'select   '   +   @fname   +   '   from   tableName '   
Exec(@s)                                 --   成功   
exec   sp_executesql   @s       --   此句會報錯   


declare   @s   Nvarchar(1000)     --   注意此處改為nvarchar(1000)   
set   @s   =   'select   '   +   @fname   +   '   from   tableName '   
Exec(@s)                                 --   成功           
exec   sp_executesql   @s       --   此句正確   

3.   輸出引數   
declare   @num   int,   @sql   nvarchar(4000)   
set   @sql= 'select   count(*)   from   tableName '   
exec(@sql)