中国电建市政建设集团有限公司网站seo教程视频
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 有一些錯誤,上文為我糾正后的結果。