freaklori Posted October 22, 2007 at 10:03 AM Report #142049 Posted October 22, 2007 at 10:03 AM Boas, Tou aqui com uma dificuldade.. Ja criei um trigger e encontra-se a funcionar a minha duvida é como posso agarrar num determinado campo que no meu caso será um campo varchar e dividir esse campo em palavras sempre que encontrar um espaço e introduzir no trigger as palavras associada a tabela mae atraves do ID... CREATE TRIGGER Novo_Registo ON TMae FOR INSERT AS INSERT INTO TFilho( ID,Palavra) SELECT ID,Texto FROM TMae Este trigger faz o seguinte... semper que inserir um registo novo na TMAE ele copia o CAMPO TEXTO para a tabela TFILHO o respectivo TEXTO e ID associado a esse texto.. o que eu quero é em vez de introduzir esse texto... ele agarre no texto divida em palavras sempre que encontrar um espaço e introduza na tabela TFILHO essas palavras com o ID associado a TMAE.. ja ouvi falar em Stored Procedures... mas ainda n encontrei nada na net sobre isso.. Se alguem me puder ajudar... (a explicaçao pode tar uma beca confusao eu posso voltar a tentar explicar melhor) Cumps FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;
Tiago Salgado Posted October 22, 2007 at 01:22 PM Report #142077 Posted October 22, 2007 at 01:22 PM Pois, não existe uma função SPLIT() mas podes usar a que ta neste site.
freaklori Posted October 22, 2007 at 01:45 PM Author Report #142081 Posted October 22, 2007 at 01:45 PM boas, vou ver esse site que me deste e ja posto aqui a solução cumps FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;
freaklori Posted October 25, 2007 at 08:59 AM Author Report #142788 Posted October 25, 2007 at 08:59 AM Boas estou aqui novamente com ou tra duvida... Criei o seguinte trigger: Create TRIGGER T ON TMae FOR INSERT AS Exec Procedure_Dividir_Texto Que executa o stored procedure -> Procedure_Dividir_Texto: CREATE PROCEDURE Procedure_Dividir_Texto AS EXTERNAL NAME [Dividir_Texto_Palavras].[CLR].[Texto_Em_Palavras] Que por sua vez executa o assemblie que ja criei no SQL mas que foi compilado em vb.net Quando vou inserir um novo registo o que deveria acontecer era executado o trigger que executava a stored procedure que por sua vez executava o assemblie que terá que receber um parametro (uma frase por exemplo) que irá dividir em palavras returnando um conjunto de palavras. o problema é que quando tento inserir um novo registo na Tabela TMAE ocorre me o seguinte erro: Msg 6522, Level 16, State 1, Procedure Procedure_Dividir_Texto, Line 0 A .NET Framework error occurred during execution of user-defined routine or aggregate "Procedure_Dividir_Texto": System.Security.SecurityException: Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. System.Security.SecurityException: at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) at System.Security.PermissionSet.Demand() at System.Data.Common.DbConnectionOptions.DemandPermission() at System.Data.SqlClient.SqlConnection.PermissionDemand() at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.SqlClient.SqlConnection.Open() at CLR.Texto_Em_Palavras() . The statement has been terminated. Aqui fica tambem o codigo que esta compilado no assemblie do SQL Vou por aqui tambem o codigo vb.net que vai dividir o texto em palavras sempre que encontra um espaço Imports System Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlTypes Imports Microsoft.SqlServer.Server Partial Public Class CLR <SqlProcedure()> _ Public Shared Sub Texto_Em_Palavras() Dim Palavras() As String Dim Texto_Dividido() As String = Nothing Dim Delimitador As Char = " " Dim Conn As New SqlConnection("Data Source=DEVELOPER\SQLEXPRESS;Initial Catalog=Testes;UID=;Password=;Trusted_Connection=true;") Conn.Open() Dim Query As String = "SELECT MAX(ID) FROM Tmae " Dim Cmd As New SqlCommand(Query, Conn) Dim ID As Integer = Cmd.ExecuteScalar() Dim Query2 As String = "SELECT Texto FROM TMae WHERE ID=" & ID Dim Cmd2 As New SqlCommand(Query2, Conn) Dim Texto As String = Cmd2.ExecuteScalar() Texto_Dividido = Texto.Split(Delimitador) ReDim Palavras(UBound(Texto_Dividido)) For i As Integer = 0 To UBound(Texto_Dividido) Palavras(i) = Texto_Dividido(i) Trigger.Novo_Registo(ID, Palavras(i)) Next End Sub End Class Public Class Trigger <SqlTrigger(Event:="FOR INSERT", Name:="T", Target:="Tmae")> _ Public Shared Sub Novo_Registo(ByVal ID As Integer, ByVal Palavra As String) Dim Conn As New SqlConnection("Data Source=DEVELOPER\SQLEXPRESS;Initial Catalog=Testes;UID=;Password=;Trusted_Connection=true;") Conn.Open() Dim Query As String = "INSERT INTO TFilho(ID,Palavra) VALUES (" & ID & " , '" & Palavra & "')" Dim cmd As New SqlCommand(Query, Conn) cmd.ExecuteNonQuery() End Sub End Class Se alguem puder ajudar... cumps FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;
freaklori Posted October 31, 2007 at 10:18 AM Author Report #144184 Posted October 31, 2007 at 10:18 AM Boas... Ao fim de algum tempo consegui resolver a situaçao... o objectivo era a criacçao de um trigger que estava associado ao evento INSERT na tabela TMae e que introduzia na tabela TFilho o texto dividido por palavras... NO SQL: Adicionar o Assemblie criado em vb.net ao Core do SQLServer CREATE ASSEMBLY [Dividir_Texto_Palavras] FROM 'C:\Projectos2005\CLR\CLR\CLR\CLR.dll' Criacção do trigger no sql: CREATE TRIGGER Gera_Trigger ON TMae FOR INSERT AS EXTERNAL NAME Dividir_Texto_Palavras.CLR.Novo_Registo A Dll foi compilada atraves da prompt do VS2005 que contem o seguinte codigo: Partial Public Class CLR <SqlTrigger(Event:="FOR INSERT", Name:="Gera_Trigger", Target:="TMae")> _ Public Shared Sub Novo_Registo() Using Conn As New SqlConnection("Context Connection = true;") Conn.Open() Dim Texto_Dividido() As String = Nothing Dim Delimitador As Char = " " Dim cmdID As New SqlCommand("SELECT Max(@@Identity) From Tmae", Conn) Dim ID As Integer = cmdID.ExecuteScalar Dim cmdTexto As New SqlCommand("SELECT Texto From TMae WHERE ID=" & ID, Conn) Dim Texto As String = cmdTexto.ExecuteScalar Texto_Dividido = Texto.Split(Delimitador) For i As Integer = 0 To UBound(Texto_Dividido) Dim cmd As New SqlCommand("INSERT INTO TFILHO (ID,Palavra) VALUES (" & ID & ",'" & Texto_Dividido(i) & "')", Conn) Dim RD As SqlDataReader = cmd.ExecuteReader() RD.Close() Next End Using End Sub Nao sei se vai ser util para alguem mas aqui fica... Cumps FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now