2012-10-26 26 views
0

觸發我想使用SMO和PowerShell腳本來進行附加到表中的觸發器。如何編寫腳本了附加到表中的SQL

我已經找到一種方法來編寫腳本與觸發的表,但是這不是什麼,我也慣於總是知道觸發連接表中的名字,我只想知道觸發器名。

我想給腳本觸發的名稱,有它的腳本出來。

我一直在尋找一種方式來做到這一點,有沒有運氣。

感謝您一如既往的幫助。

回答

0

下面是一個使用SQLPS一個例子:

SQLSERVER:\SQL\Z001\SQL1\Databases\pubs>$db = get-item . 
SQLSERVER:\SQL\Z001\SQL1\Databases\pubs>$db.Tables | foreach {$_.Triggers} | where {$_.name -like"employee*"} | foreach {$_.Script()} 

SET ANSI_NULLS ON 
SET QUOTED_IDENTIFIER ON 

CREATE TRIGGER employee_insupd 
ON employee 
FOR insert, UPDATE 
AS 
--Get the range of level for this job type from the jobs table. 
declare @min_lvl tinyint, 
    @max_lvl tinyint, 
    @emp_lvl tinyint, 
    @job_id smallint 
select @min_lvl = min_lvl, 
    @max_lvl = max_lvl, 
    @emp_lvl = i.job_lvl, 
    @job_id = i.job_id 
from employee e, jobs j, inserted i 
where e.emp_id = i.emp_id AND i.job_id = j.job_id 
IF (@job_id = 1) and (@emp_lvl <> 10) 
begin 
    raiserror ('Job id 1 expects the default level of 10.',16,1) 
    ROLLBACK TRANSACTION 
end 
ELSE 
IF NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl) 
begin 
    raiserror ('The level for job_id:%d should be between %d and %d.', 
     16, 1, @job_id, @min_lvl, @max_lvl) 
    ROLLBACK TRANSACTION 
end 
0

script似乎工作確定與SQL Server 2008R2。你沒有指定數據庫,但Powershell和SMO有點像MS產品。

SELECT 
Tables.Name as 'TableName', 
Triggers.name as 'TriggerName', 
Comments.Text as 'TriggerText' 
FROM sysobjects Triggers 
     Inner Join sysobjects Tables On Triggers.parent_obj = Tables.id 
     Inner Join syscomments Comments On Triggers.id = Comments.id 
WHERE 
     Tables.name = '<table-name>' 
ORDER BY Tables.Name, Triggers.name 
+0

這將返回我的分貝每一個表的多個行和時機文是不一樣的行中的所有方面。 – justinf