close

懶惰確實是推動世界進步的最大動力,為了省下工作時間來上網,剛弄了個能清理各個日誌表的存儲過程。過程中學會了使用 mssql sp_executesql()

sp_executesql() 的用途就是在執行時執行剛拼湊成的 sql 語句。整套大概這麼寫:
-- 定義變量
declare @sqlCommand nvarchar(500)
declare @ParmDefinition nvarchar(500)
declare @dbname varchar(50)
declare @dbid_check integer
declare @column_check varchar(50)

set @dbid_check = 1
set @column_check = 'dbid'

-- 拼湊 SQL 語句,注意要加 Unicode 的「N」
set @sqlCommand = N'select @dbname_out = name from sysdatabases where ' + @column_check + ' = @dbid'

-- 定義該語句的變量,@dbid 是 input,@dbname_out 則是 output
set @ParmDefinition = N'@dbid integer, @dbname_out varchar(50) output'

-- 執行語句
execute sp_executesql @sqlCommand, @ParmDefinition, @dbid = @dbid_check, @dbname_out = @dbname output;

print @dbname


我的系統有很多日誌表,每個都可能有不同的保留天數,有了這樣 dynamic sql 的功能,我就可以寫好一個通的存儲過程,設好 schedule job,以後只要在設定表中登記表名、保留天數,系統就可以自動處理,不必再為每一個新表寫獨立的代碼了。
 

arrow
arrow
    創作者介紹
    創作者 過時程式員 的頭像
    過時程式員

    過時程式員的部落格

    過時程式員 發表在 痞客邦 留言(0) 人氣()