Juin Posted April 3, 2012 at 01:42 PM Report #447237 Posted April 3, 2012 at 01:42 PM Boas, estou a programar em SQL e não estou a conseguir fazer o seguinte, espero q algum me ajude: ALTER PROCEDURE dbo.sx @Sx varchar(30) AS SET NOCOUNT ON; DECLARE @a as int set @a = 1 DECLARE @b as varchar(max) SELECT @b = 'SELECT campos FROM '+@Sx+' WHERE id = '+convert(varchar(3), @a) EXEC (@b) estou a usar exec pois passo o nome da table por parametro, o id desta maneira tenho que converter para varchar. Agora quero é incrementar o @a tentei assim SET @a = @a + 1 mas nao é possivel pois dá erro de converter para vchar algum ajuda??
Caça Posted April 3, 2012 at 03:58 PM Report #447279 Posted April 3, 2012 at 03:58 PM Tens ai uma plica a mais, troca SELECT @b = 'SELECT campos FROM '+@Sx+' WHERE id = '+CONVERT(VARCHAR(3), @a)+' por SELECT @b = 'SELECT campos FROM '+@Sx+' WHERE id = '+CONVERT(VARCHAR(3), @a) Pedro Martins Não respondo a duvidas por PM
Juin Posted April 3, 2012 at 04:03 PM Author Report #447282 Posted April 3, 2012 at 04:03 PM Sim foi porque editei o code para por aqui, mas isto não é o que pretendo resolver Mas tnks na mesma
Caça Posted April 3, 2012 at 04:04 PM Report #447283 Posted April 3, 2012 at 04:04 PM Para somares, antes tens de atribuir um valor a variavel, tipo DECLARE @a AS INT = 0 Pedro Martins Não respondo a duvidas por PM
Juin Posted April 3, 2012 at 04:13 PM Author Report #447288 Posted April 3, 2012 at 04:13 PM Sim mas ao somar 'SET '+@a+' = '+@a+' + 1' Obtenho Resultado: Conversion failed when converting the varchar to data type int
Caça Posted April 3, 2012 at 04:31 PM Report #447297 Posted April 3, 2012 at 04:31 PM Para isso tens de converter para varchar tal como tinhas em cima. Pedro Martins Não respondo a duvidas por PM
Juin Posted April 3, 2012 at 04:43 PM Author Report #447302 Posted April 3, 2012 at 04:43 PM Tentei assim 'SET '+@a+' = '+convert(varchar(3), @a)+' + 1' 'SET '+convert(varchar(3), @a)+' = '+convert(varchar(3), @a)+' + 1' 'SET '+@a+' = '+convert(varchar(3), @a+1) em todos obtive erros de conversão ...
Caça Posted April 3, 2012 at 04:46 PM Report #447304 Posted April 3, 2012 at 04:46 PM Não estou a perceber qual o objectivo disso.. Pedro Martins Não respondo a duvidas por PM
Juin Posted April 3, 2012 at 04:58 PM Author Report #447310 Posted April 3, 2012 at 04:58 PM SELECT @b = 'SELECT campos FROM '+@Sx+' WHERE id = '+CONVERT(VARCHAR(3), @a) SET '+@a+' = '+@a+'+1' O que quero é fazer isso
Caça Posted April 3, 2012 at 05:43 PM Report #447319 Posted April 3, 2012 at 05:43 PM Continuo sem perceber o porquê dessa soma ai.., para somares a variável @a na tua string, essa variável já tem de ir lá declarada.. Se o teu objectivo for criar um ciclo tens de fazer de forma diferente. Pedro Martins Não respondo a duvidas por PM
Juin Posted April 3, 2012 at 06:27 PM Author Report #447324 Posted April 3, 2012 at 06:27 PM O meu objectivo é passar estas variáveis para xml e ter algo assim <root> <subs> <sub></sub> <sub> <subsubs> <subsub></subsub> </subsubs> </sub> </subs> </root> e por isso em caso de ter os subsubs que nem todos têm faço assim SELECT @b = 'SELECT text as [@tipo_text], input as [@tipo_input], input_id as [@tipo_id], genS as [@tipo_s], CASE WHEN campos IS NOT NULL THEN --all tipo camps ( SELECT campos as [@tipo_camps] FROM '+@Sch+' WHERE id = '+CONVERT(VARCHAR(3), @a)+' FOR XML PATH(''subsub''), TYPE, ROOT(''subsubs'') ) END FROM '+@Sch+' FOR XML PATH(''sub''), TYPE, ROOT(''subs'')'
Caça Posted April 3, 2012 at 08:00 PM Report #447342 Posted April 3, 2012 at 08:00 PM Antes de partir para ai, deves certificar-te a a query está a correr como pretendes, só depois substituir os valores necessários por variáveis. Pedro Martins Não respondo a duvidas por PM
Juin Posted April 3, 2012 at 08:05 PM Author Report #447345 Posted April 3, 2012 at 08:05 PM isto q coloquei funciona, apenas quero incrementar o @a para tomar os campos deste id
Caça Posted April 3, 2012 at 08:27 PM Report #447357 Posted April 3, 2012 at 08:27 PM A única coisa que precisas para incrementar é SET @a = @a + 1 Pedro Martins Não respondo a duvidas por PM
Juin Posted April 3, 2012 at 08:38 PM Author Report #447358 Posted April 3, 2012 at 08:38 PM Sim eu sei, mas não dá porque tenho que aplicar dentro da variável @b e ai dá conflito de varchar para inteiro. Diz me uma coisa, se passar como parametro o nome de uma tabela não posso fazer select sem ser numa variável para depois executar não´é?
Caça Posted April 3, 2012 at 09:05 PM Report #447361 Posted April 3, 2012 at 09:05 PM Estás a falar disto? http://msdn.microsoft.com/pt-br/library/ms174393.aspx Tipo SET QUOTED_IDENTIFIER ON SELECT * FROM "Tabela" Pedro Martins Não respondo a duvidas por PM
Juin Posted April 3, 2012 at 10:56 PM Author Report #447385 Posted April 3, 2012 at 10:56 PM É possivel fazer algo do género disto para escrever para xml SELECT text as [@text], input as [@input], input_id as [@in_id] from Evento WHERE campos IN (SELECT campos as [@camps] FROM Evento FOR XML PATH('campo'), TYPE, ROOT('campos') ) FOR XML PATH('tipo'), TYPE, ROOT('tipos') o resultado que procuro com isso é <tipos> <tipo> <campos> <campo> </campo> </campos> </tipo> </tipos>
rumbafum Posted April 4, 2012 at 09:20 AM Report #447411 Posted April 4, 2012 at 09:20 AM select ( select * from eventos -- estes serão os elementos campo for XML PATH('campo'), ROOT('campos'), TYPE ) for XML PATH('tipo'), ROOT('tipos') isto geraria xml do tipo que mostraste.
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