Hej! Förstår inte riktigt vad du vill uppnå men så här kan du i vart fall låta en trigger skriva till en fil. Jo, det är såhär: Då tror jag att du skall ta en titt på Data Transformation Services (DTS). Eller schemalägga ett vbscript om det inte tidskritiskt på sekunden. så du menar att det är inte möjligt att göra en trigger som fixar att en export av en flatfil (byggd på en förutbestämd fråga) till en mapp görs? Jo, visst går det. Det första trigger exemplet visar ju hur man kan skriva till en fil. Det är bara att fylla @out variabeln med det du vill exportera. Jo du har helt rätt....ska egentligen bara göra en enkel demo, men borde kanske tänka till lite mer :-) Provade att göra triggern så här Vänta nu lite... hej igen jag exporterar ett tabellinnehåll, ett dts package som lagras i SQL, trigger i SQL *LÖST* :-)
Jag skulle vilja göra en trigger som:
när jag uppdaterar en kolumn i en databas skickar iväg (exporterar) en flatfil (textfile) till en mapp utanför. Flatfilen ska byggas på en fråga. Är det möjligt att göra det? (har sql server 2000 standard edition)
vänliga hälsningar KarinSv: trigger i SQL
<code>
create trigger trgCustomerUpdate
on dbo.Customers
after update as
declare @out nvarchar(4000)
select @out = 'Skrivs i filen'
select @out = 'echo ' + @out + ' >> C:\temp\out.txt'
exec master..xp_cmdshell @out, NO_OUTPUT
</code>
/TommySv: trigger i SQL
Jag har en databas för artiklar och när en av kolumnerna, som heter Antal, uppdateras och ett av värdena där sjunker under säj 5, ska en flatfil genereras från sql server till en mapp utanför.
Denna mapp i sin tur är receivemapp för en biztalkserver och flatfilen kan därför inte ligga där hela tiden utan bara när det blir dags, alltså när värdet har sjunkit under 5. (För sedan ska flatfilen omvandlas till en order som skickas iväg till en leverantör, och man ska bara beställa ny vara när det finns mindre än 5 stycken av något kvar).
Mvh KarinSv: trigger i SQL
Det går säkert att göra med bara SQL men blir troligen lättare att göra och underhålla med något mer uttrycksfullt språk/verktyg.
Förmodligen vill du väl kolla att du inte redan skickat beställning mm. Möjligen skall du låta triggern göra en insert till en att-beställa tabell eller så, t ex i triggern:
<code>
insert ToPurchase (ProductID)
select ProductID from inserted
where StockQty < 5
</code>
/TommySv: trigger i SQL
men om det går... hur skulle det se ut i kod då?
/KarinSv: trigger i SQL
Det jag menade är att du kanske har fler affärsregler än att filen skall skapas varje gång lagersaldot är under 5. T ex så kommer den generera ytterliggare en beställning när saldot går från 4 till 3 osv. Något som säkert går att fixa i SQL men är förmodligen enklare med vb.
Då kan det vara mer lämpligt att skriva affärslogiken i t ex vb och nöja sig med att logga att beställningspunkten är nådd med triggern.
/TommySv: trigger i SQL
Tack!!
/KarinSv: trigger i SQL
<code>
create trigger trgUppdatera
on dbo.Artikeldb
after update as
declare @out nvarchar(4000)
execute query @out = 'SELECT Artikelgrupper.Artikelgruppsnr, Artikelgrupper.Artikelgruppsnamn, Artiklar.Artikelnr, Artiklar.Artikelnamn, Artiklar.Antal,
Artiklar.Inkopspris
FROM Artikelgrupper INNER JOIN
Artiklar ON Artikelgrupper.Artikelgruppsnr = Artiklar.Artikelgruppsnr
if Antal<5'
select @out = 'echo ' + @out + ' >> C:\BizTalkTest\out.txt'
exec master..xp_cmdshell @out, NO_OUTPUT
</code>
men fick felmeddelandet: Invalid object name 'dbo.Artikeldb'.
trodde väl inte riktigt att det var rätt men...
Databasen heter dock Artikeldb.
+ en annan sak, när jag exporterar en flatfil så bestämmer jag att den ska se ut t ex
file type: ansi
row delimiter: {CR}{LF}
column delimiter: tab
text qualifier: none
hur kan jag fixa det när jag skapar filen genom triggern??
Mvh/KarinSv: trigger i SQL
create trigger trgUppdatera on TabellÄgare.TabellNamn...
Med "execute query..." försöker du alltså köra lagrade proceduren "query" med @out variabeln som parameter samtidigt som du försöker tilldela den ett strängvärde som ej avslutas rätt... och inte verkar vara korrekt sql.
Det finns inte stort hopp om att få den triggern att kompileras.
För att bygga upp @out variabeln med information från flera rader måste du använda en cursor.
Ta mitt råd, hacka ett vbscript som körs var femte minut eller så. Kanske skapa en enkel trigger om själva sökningen av artiklar med färre än fem i lager är tung. Finns det inte funktionalitet i BizTalk-servern för schemaläggning etc?
/TommySv: trigger i SQL
Jo det du skrev i början att
låta triggern göra en insert till en att-beställa tabell eller så, t ex i triggern:
<code>
insert ToPurchase (ProductID)
select ProductID from inserted
where StockQty < 5
</code>
lät som en bra idé, och sen kan jag då göra en trigger till som lägger en fil i inputmappen till BizTalkservern, t ex när det finns två poster i att-beställa tabellen, eller hur?
Det borde bli den enklaste lösningen va?
mvh/KarinSv: trigger i SQL
och som jag vill skicka ut som textfil när en kolumn; Antal<5, är det då möjligt att göra en trigger som skickar hela dts package när kolumnen Antal uppdateras så att det blir minder än 5 st.
Det fungerade med dts-paketet, en stored procedure och triggern....om någon någon gång vill veta hur ..hör av dig!
mvh/Karin