動態SQL語句 (轉)

amyz發表於2007-08-17
動態SQL語句 (轉)[@more@]

1:
普通語句可以用Exec
eg:  * from tableName
  Exec('select * from tableName')
  sp_executesql N'select * from tableName'  -- 請注意字串前一定要加N

2:
欄位名,表名,名之類作為變數時,必須用動態SQL
eg: 
declare @fname varchar(20)
set @fname = '[name]'
Select @fname from syss  -- 錯誤
Exec('select ' + @fname + ' from sysobjects')  -- 請注意 加號前後的 單引號的邊上要加空格
exec sp_executesql N' select ' + @fname + ' from sysobjects'
當然將字串改成變數的形式也可
  declare @s varchar(1000)
  set @s = 'select ' + @fname + ' from sysobjects'
  Exec(@s)  -- 成功
  exec sp_executesql @s  -- 此句會報錯

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

3: 輸出引數
eg:
declare @num,
  @sqls
set @sqls='select count(*) from  to:' + @servername + '.a.o.b'">' + @servername + '.a.dbo.b'
exec(@sqls)
我如何能將exec執行的結果存入變數@num中

declare @num int,
  @sqls nvarchar(4000)
set @sqls='select @a=count(*) from
exec sp_executesql @sqls,N'@a int output',@num output
select @num


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-963128/,如需轉載,請註明出處,否則將追究法律責任。

相關文章