動態存儲過程(帶LIKE)的一些總結。

来源:互联网 发布:java 用户权限管理 编辑:程序博客网 时间:2024/06/06 05:10
 

1.      常見錯誤

select count(*) from (@table) where title like '%'+(@title)+'%'--错误

From 子句只能帶表名、視圖名、表變量,編譯器把@tablename看作表變量,會報變量沒有申明的錯誤。

2.      sp_executesql

執行可以多次重用或動態申城的Transact-SQL語句或批処理。Transact-SQL語句或批処理可以包含嵌入參數。

3.      動態SQL語句的一些常見寫法

3.1) 普通SQL語句可以用Exec執行

  Eg:     select * from tableName

                Exec('select * from tableName')

                sp_executesql N'select * from tableName' --  請注意字符串前一定要加N

 

            3.2) 字段名、表明、數據庫名之類作爲變量時,必須用動態SQL

 

  Eg:     declare @fname varchar(20)  

      set @fname = '[name]'

      Select @fname from sysobjects-- 錯誤

      Exec('select ' + @fname + ' from sysobjects')

      --請注意:加號前後的單引號的邊上要加上空格

 

      Exec sp_executesql N' select ' + @fname + ' from sysobjects'   --這句不能執行 請參考:sp_executesql

 

            必須将字符串改成变量的形式才可以使用

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.3) 輸出參數  

  Eg:     declare @num,

      @sqls

      set @sqls='select count(*) from   ' + @servername + '.a.dbo.b'

      exec(@sqls)

 

            我如何能將exec執行的結果存入變量@num中

 

            declare @num int,

      @sqls nvarchar(4000)

      set @sqls='select @a=count(*) from '+@servername+'.a.dbo.b'

      exec sp_executesql @sqls,N'@a int output',@num output

      select @num

 

4.      在T_SQL中,兩個單引號表示一個單引號

Eg:       Select ‘’’’得到正確的動態存儲過程(帶like語句)

 

CREATE PROCEDURE GetNewsCount

      @table varchar(60),

      @title  varchar(200)

      as

declare @sql varchar(600)

set @sql=' select count(*) from '+rtrim(@table)+' where title like ''%'+(@title)+'%'''

exec (@sql)

GO

 

==後記:

博文:http://blog.csdn.net/swort_177/article/details/2960422 有一些錯誤,上文為我糾正后的結果。

原创粉丝点击