webForumDet fria alternativet

Stored Procedure - Hjälp

10 svar · 389 visningar · startad av Nson

NsonMedlem sedan juni 2001145 inlägg
#1

Så var man i gång att meckade med Stored Procedure's och kör fast.

Det här vill jag göra:

I en databas har jag en tabell, här vill jag utföra en SELECT sats och hämta in ett par värden.

För att i nästa stund använda de värden som jag hämtade i SELECT satsen för att sätta in dom i en INSERT INTO sats, men då i en tabell som ligger i en annan databas.

Exmepel på kod som inte fungerar:

CREATE PROCEDURE dbo.StoredProcedure1

(
	@name_1 varchar(50);
	@name_2 varchar(50);
)

AS
SELECT name AS @Name_1 FROM Test_1

INSERT INTO databas2.Test_2 (name) VALUES (@name_1)

RETURN

Tacksam för all hjälp.

/Nson

@ndersMedlem sedan juni 200032 969 inlägg
#2

Ska du verkligen ha @name_1 och @name_2 som inputparametrar? Det kanske de inte borde vara. Prova detta:

CREATE PROCEDURE dbo.StoredProcedure1 
AS

DECLARE 
@name_1 varchar(50),
@name_2 varchar(50) 

SELECT [b]@name_1 = name[/b] FROM Test_1 

INSERT INTO databas2.Test_2 (name) VALUES (@name_1) 

RETURN

Mvh

NsonMedlem sedan juni 2001145 inlägg
#3

Aha... Så om jag fattar det rätt:

ex:

ALTER PROCEDURE dbo.StoredProcedure1

AS

(
@input varchar(50)

)

DECLARE

@varibel varchar(50)

så är den första då en input (som man skickar med) och det under declare är variabler att använda i "sql satsen" eller ?

Är jag helt ute o cycklar ?

@ndersMedlem sedan juni 200032 969 inlägg
#4

Variabler du definierar innanför parentesen före AS är inparametrar. Nu vet jag inte vad du använder för språk när du programmerar, men jag gör en liten jämförelse med VB:

Public Function Testfunktion (byval inparameter1 as string, byval inparameter2 as string)
Dim lokalvariabel1 as string
Dim lokalvariabel2 as string
..
..
End function

Resp

CREATE PROCEDURE dbo.StoredProcedure1 (@inparameter1 varchar(50), @inparameter2 as varchar(50))
AS

DECLARE 
@lokalvariabel1 varchar(50),
@lokalvariabel2 varchar(50) 
...

Det var iofs ett bra tag sedan jag höll på att pilla med sånt här, men jag hoppas att jag inte gjort bort mig. Jag vet inte om min jämförelse gick fram heller, men jag försökte i alla fall. :e

Mvh,

NsonMedlem sedan juni 2001145 inlägg
#5

Den satt som en smäck... Tack skall du ha!

En annan fråga, när man definerar in och variabler, om man tex har image eller text kolumner måste man då ange strolek på dom eller ?

/Nson

@ndersMedlem sedan juni 200032 969 inlägg
#6

Du behöver inte ange storleken på text och image när du har med dem som inparametrar.

Jag tror dock inte att man överhuvudtaget kan skapa lokala variabler av typen text eller image i en stored procedure. Det kan ha ändrats visserligen, men så låg det till när jag jobbade med SQL Server 97 förr i tiden.

mvh,

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Du behöver inga variabler för att kopiera poster från en tabell till en annan.

insert into INSERT INTO databas2.Test_2 (name) SELECT  name FROM Test_1

Hur skall det fungera om test_1 innehåller flera poster? Med din lösning vet du inte vilken poster du får.

NsonMedlem sedan juni 2001145 inlägg
#8

Men om man skall ha mera data och sätta in då Lars, kan man köra flera select satser ?

Alltså jag skall dels sätta in data som kommer från en annan databas men jag skall ochså sätta in nya variabler från ett formolär...

/Nson

LarsGMedlem sedan dec. 200012 464 inlägg
#9

Hur då menar du?

Du kan ju lägga allt i en union

create procedure p(@name varchar(20))
as
insert into t1 select @name union select name from t2

Jag förstår nog inte vad du menar.

NsonMedlem sedan juni 2001145 inlägg
#10

Mer trubbel,

som sagt plockar in data mellan två olika tables som ligger i två databaser... trodde man kunde göra :

INSERT INTO databasnamn.tabellnamn men det vill sig inte...

INSERT INTO tabellnamn IN databasnamn vill sig inte heller ...

urgha för sql känns det som nu...

Lars... Koden ser ut så här den som jag använder nu:

ALTER PROCEDURE dbo.postnewad
(
@ID as uniqueidentifier,
@fldType as varchar(50),
@fldCategory as varchar(50),
@fldTitle as varchar(150),
@fldText as text
)
AS

DECLARE
@fldLocation varchar(50),
@fldMarrialStatus varchar(50),
@fldSex1 varchar(50),
@fldSex2 varchar(50),
@fldAge1 varchar(50),
@fldAge2 varchar(50)

SELECT @fldLocation = fldLocation, @fldMarrialStatus = fldMarrialStatus,
@fldSex1 = fldSex_1, @fldSex2 = fldSex_2, @fldAge1 = fldAge_1,
@fldAge2 = fldAge_2 FROM portal_users.logins WHERE fldID = @ID

INSERT INTO portal_personals.ads (fldType, fldCategory, fldTitle, fldText, fldPoster, fldPoster_location, fldPoster_age1, fldPoster_age2,
fldPoster_MarrialStatus, fldPoster_Sex1, fldPoster_Sex2) VALUES (@fldType, @fldCategory, @fldTitle, @fldText, @ID, @fldlocation, @fldage1, @fldage2,
@fldMarrialStatus, @fldSex1, @fldSex2)

RETURN

Som sagt var en del data kommer från ett formulär och en del från en annan databas...

LarsGMedlem sedan dec. 200012 464 inlägg
#11
 
portal_personals.dbo.ads
140 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)