Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

izvršavanje SQLQUERY-a

[es] :: MS SQL :: izvršavanje SQLQUERY-a

[ Pregleda: 3114 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon izvršavanje SQLQUERY-a04.01.2007. u 20:05 - pre 208 meseci
pozdrav,
nešto mi nikako nije jasno(možda je pitanje bezvezno al :) >, imam sql server 2005 express edition i sql server management studio, i napravim novi sql query u kojem kreiram stored proceduru recimo, izvršim ga i kreira se stored procedura, e sad napravim novi sql query u kojem napišem "create login...." itd. za kreiranje login-a,i kad kliknem execute napravi se također novi login, no ne znam kako da kad taj sql query spremim nekud na disk recimo D:\upit.sql, kako da ja to sad pokrenem iz neke stored procedure? ili iz programa kojeg napišem, dakle htio bih u nekoj stored proceduri onda pokrenuti taj sql upit koji je na D:\ i zove se upit.sql? jel li to moguče uopće tako? ili se to može samo otvoriti i u management studiu napraviti execute i to je to?

zahvaljujem!
----Roberto----
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
*.static.sbb.co.yu.

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: izvršavanje SQLQUERY-a05.01.2007. u 07:48 - pre 208 meseci
Na http://media.techtarget.com/di...Misc/sp_ExecuteSQLFromFile.txt imas SQL kod za storovanu, i onda pozoves

exec sp_ExecuteSQLFromFile fileName
Every hamster has his day.
 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: izvršavanje SQLQUERY-a05.01.2007. u 15:15 - pre 208 meseci
e daj mi još reci uvijek mi kaže da nema C:\Program Files\Microsoft SQL Server\File.fmt, -ćemu služi ta datoteka?
napravio sam SP i kad ju izvršim upišem samo prvi parametar @PcFetch, tu upišem putanju do fajla recimo D:\upit.sql, drugi parametar nemoram prosljedit jer je onda null,a ima još jedan @PcUltra koji je tip bit i jednak je 0,
...znači zanima me ćemu služi @PcUltra, @PcFetch je putanja do upita pretpostavljam,a drugi @PcAdmin vjerojatno za korisnika,,, !?

hvala!
----Roberto----
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
*.static.sbb.co.yu.

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: izvršavanje SQLQUERY-a05.01.2007. u 15:28 - pre 208 meseci
Sorry, nisam ti poslao dobar link. Ovde: http://searchsqlserver.techtar...89483,sid87_gci1135562,00.html imas opis svega.

Koristio sam samo verziju bez opcionih paramatara, ona radi dobro. Ostalo ne znam.
Every hamster has his day.
 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: izvršavanje SQLQUERY-a05.01.2007. u 16:18 - pre 208 meseci
proučio sam sve ovo,al ti izgleda imaš neku prethodnu verziju SP onda, onaj link koji si mi prvi dao je ista SP kao i na ovom drugom samo što tu na ovom drugom ima opis, nakon kreiranja SP (ona se kreira bez problema) upišem:

Code:

execute sp_ExecuteSQLFromFile 'D:\upit.sql',null,0


a on meni na to kaže:

Code:

Msg 4860, Level 16, State 3, Line 1
Cannot bulk load. The file "C:\Program Files\Microsoft SQL Server\File.fmt" does not exist.


i sad tu na ovom drugom linku koji si mi dao piše:

-----------------------------------------------------------------------------------------------------------------------
The SQL code in Listing 1 also creates a format file in the SQL Server program directory ("C:\Program Files\Microsoft SQL Server\File.fmt"). The location can be changed by modifying Listing 1 in two places. The xp_cmdshell extended stored procedure is used to create the format file. The ability to execute xp_cmdshell is required only when the sp_ExecuteSQLFromFile stored procedure is created and only by the user doing the creation. That's a very different operation than actually executing sp_ExecuteSQLFromFile.

The format file is used when importing the T-SQL code from a file into a temporary table with the BULK INSERT statement. The format file allows an IDENTITY column to exist in the temporary table. The IDENTITY column provides a way to order the rows of the temporary table when assembling the T-SQL code to be executed. Unless an ORDER BY clause is used in the involved SELECT statement there's no guarantee that the rows are returned in the order they appear in the file.
-----------------------------------------------------------------------------------------------------------------------

a meni taj file.fmt ne kreira nigdje nisam ga pronašao pomoću search-a, a od sva tri parametra je obavezan samo prvi tj.putanja do file-a, daj molim te pogledaj dal ti imaš taj file.fmt na C:\Program Files\Microsoft SQL Server\ !?
----Roberto----
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
*.static.sbb.co.yu.

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: izvršavanje SQLQUERY-a08.01.2007. u 08:17 - pre 208 meseci
Izvini sto nisam odmah odgovorio, bio sam zauzet preko vikenda.
Kao sto rekoh, procedura kod mene radi ok kada prosledim samo ime fajla. fmt fajl se kreira i sadrzi podatke o serveru (verzija, collation i sl.)
Pokusao sam da obrisem fajl i izvrsim proceduru, posle cega je fajl opet uspesno kreiran.

Moj savet je da proveris da li imas prava da pises u dir C:\Program Files\Microsoft SQL Server\ ako ne, promeni kod da upisuje fajl na neko drugo mesto (treba da izmenis kod na dva mesta).

btw, proceduru izvrsavam sa:
EXEC sp_ExecuteSQLFromFile 'c:\query.sql'
znaci bez dodatnih parametara, mada to ne bi trebalo nista da znaci...
Every hamster has his day.
 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: izvršavanje SQLQUERY-a08.01.2007. u 12:51 - pre 208 meseci
da dovoljno je prosljediti samo putanju do upita (ja radim tocno tako kako si gore napisao), jer druga dva parametra imaju def.vrijednosti pa ako se ne prosljede zadrze defaultnu, sad sam ja sve ispocetka napravio eto ovako:
kreirao sam novi query, u njega stavio kod za kreiranje SP, koji sam izmjenio da fajl pise recimo na C:\, izmjenio sam na dva mjesta gdje god je prije bilo C:\Program Files\... ,i opet mi kriera lijepo proceduru al tu datoteku nikako, probao sam vise lokacija al nikad ju uopće ne kreira, nego zamjetio sam da kad se procedura kreira pa idem na MOdyfy onda mi u proceduri nedostaje kod sa kraja (u ovom listingu je oznaceno - pri dnu)! probao sam taj dio posebno izvršiti al ni onda ne kreira tu datoteku! imaš koju ideju? (inaće ovo sam probao na dva računala, oba naravno u SQL SERVER Surface Area Configuration imaju xp_cmdshell omogucen), no na nijednom ne kreira taj file, pa zato počinjem sumnjati da ja nešto dobro ne napravim ili da tvoj kod za kreiranje procedure nije drugačiji, ne pada mi više ništa na pamet jer ne znam šta da več probam :)

Code:

USE master
GO
CREATE PROCEDURE dbo.sp_ExecuteSQLFromFile
    @PCFetch varchar(1000),
    @PCAdmin varchar(1000) = NULL,
    @PCUltra bit = 0
AS

SET NOCOUNT ON

DECLARE @Return int
DECLARE @Retain int
DECLARE @Status int

SET @Status = 0

DECLARE @Task varchar(2000)

DECLARE @Work varchar(2000)

DECLARE @Line varchar(8000)

DECLARE @SQL1 varchar(8000)
DECLARE @SQL2 varchar(8000)
DECLARE @SQL3 varchar(8000)
DECLARE @SQL4 varchar(8000)
DECLARE @SQL5 varchar(8000)
DECLARE @SQL6 varchar(8000)
DECLARE @SQL7 varchar(8000)
DECLARE @SQL8 varchar(8000)
DECLARE @SQL9 varchar(8000)

DECLARE @CRLF    char(2)

DECLARE @Save tinyint

DECLARE @Have     int

DECLARE @SQLA     int
DECLARE @SQLZ     int
DECLARE @SQLN     int

DECLARE @BOLA datetime
DECLARE @BOLZ datetime
DECLARE @BOLN datetime

CREATE TABLE #DBAT (Line varchar(8000), Work int IDENTITY(1,1))

CREATE TABLE #DBAZ (Batch int, SQLA int, SQLZ int, SQLN int, BOLA datetime, BOLZ datetime, BOLN datetime, Status int)

SET @CRLF = CHAR(13) + CHAR(10)

SET @SQL1 = ''
SET @SQL2 = ''
SET @SQL3 = ''
SET @SQL4 = ''
SET @SQL5 = ''
SET @SQL6 = ''
SET @SQL7 = ''
SET @SQL8 = ''
SET @SQL9 = ''

SET @Save = 1

SET @Have = 0

SET @SQLA = 1

SET @PCAdmin = ISNULL(@PCAdmin,'C:\File.fmt')

SET @Task = 'BULK INSERT #DBAT FROM ' + CHAR(39) + @PCFetch + CHAR(39) + ' WITH (FORMATFILE = ' + CHAR(39) + @PCAdmin + CHAR(39) + ')'

EXECUTE (@Task)

SET @Return = @@ERROR IF @Status = 0 SET @Status = @Return

DECLARE Lines CURSOR FAST_FORWARD FOR SELECT ISNULL(Line,''), Work FROM #DBAT ORDER BY Work

OPEN Lines

FETCH NEXT FROM Lines INTO @Line, @SQLZ

WHILE @@FETCH_STATUS = 0 AND @Status = 0

    BEGIN

    IF UPPER(LTRIM(RTRIM(@Line))) = 'GO'

        BEGIN

        SET @BOLA = GETDATE()

        SET @Have = @Have + 1

        EXECUTE (@SQL1+@SQL2+@SQL3+@SQL4+@SQL5+@SQL6+@SQL7+@SQL8+@SQL9)

        SET @Return = @@ERROR -- IF @Status = 0 SET @Status = @Return

        SET @BOLZ = GETDATE()

        SET @SQLN = @SQLZ - @SQLA

        SET @BOLN = @BOLZ - @BOLA

        INSERT #DBAZ VALUES (@Have, @SQLA, @SQLZ, @SQLN, @BOLA, @BOLZ, @BOLN, @Return)

        SET @SQL1 = ''
        SET @SQL2 = ''
        SET @SQL3 = ''
        SET @SQL4 = ''
        SET @SQL5 = ''
        SET @SQL6 = ''
        SET @SQL7 = ''
        SET @SQL8 = ''
        SET @SQL9 = ''

        SET @Save = 1

        SET @BOLA = GETDATE()

        SET @SQLA = @SQLZ + 1

        END
        ELSE
        BEGIN

        IF @Save = 1 IF DATALENGTH(@SQL1) + DATALENGTH(@Line) < 7998 SET @SQL1 = @SQL1 + @Line + @CRLF ELSE SET @Save = 2
        IF @Save = 2 IF DATALENGTH(@SQL2) + DATALENGTH(@Line) < 7998 SET @SQL2 = @SQL2 + @Line + @CRLF ELSE SET @Save = 3
        IF @Save = 3 IF DATALENGTH(@SQL3) + DATALENGTH(@Line) < 7998 SET @SQL3 = @SQL3 + @Line + @CRLF ELSE SET @Save = 4
        IF @Save = 4 IF DATALENGTH(@SQL4) + DATALENGTH(@Line) < 7998 SET @SQL4 = @SQL4 + @Line + @CRLF ELSE SET @Save = 5
        IF @Save = 5 IF DATALENGTH(@SQL5) + DATALENGTH(@Line) < 7998 SET @SQL5 = @SQL5 + @Line + @CRLF ELSE SET @Save = 6
        IF @Save = 6 IF DATALENGTH(@SQL6) + DATALENGTH(@Line) < 7998 SET @SQL6 = @SQL6 + @Line + @CRLF ELSE SET @Save = 7
        IF @Save = 7 IF DATALENGTH(@SQL7) + DATALENGTH(@Line) < 7998 SET @SQL7 = @SQL7 + @Line + @CRLF ELSE SET @Save = 8
        IF @Save = 8 IF DATALENGTH(@SQL8) + DATALENGTH(@Line) < 7998 SET @SQL8 = @SQL8 + @Line + @CRLF ELSE SET @Save = 9
        IF @Save = 9 IF DATALENGTH(@SQL9) + DATALENGTH(@Line) < 7998 SET @SQL9 = @SQL9 + @Line + @CRLF ELSE SET @Save = 0

        END

    FETCH NEXT FROM Lines INTO @Line, @SQLZ

    END

CLOSE Lines DEALLOCATE Lines

IF DATALENGTH(@SQL1) > 0 AND @Status = 0

    BEGIN

    SET @BOLA = GETDATE()

    SET @Have = @Have + 1

    EXECUTE (@SQL1+@SQL2+@SQL3+@SQL4+@SQL5+@SQL6+@SQL7+@SQL8+@SQL9)

    SET @Return = @@ERROR -- IF @Status = 0 SET @Status = @Return

    SET @BOLZ = GETDATE()

    SET @SQLN = @SQLZ - @SQLA + 1

    SET @BOLN = @BOLZ - @BOLA

    INSERT #DBAZ VALUES (@Have, @SQLA, @SQLZ, @SQLN, @BOLA, @BOLZ, @BOLN, @Return)

    END

IF @PCUltra <> 0

    BEGIN

      SELECT Batch
           , SQLA AS LineFrom
           , SQLZ AS LineThru
           , SQLN AS CodeSize
           , CONVERT(char(12),BOLA,14) AS TimeFrom
           , CONVERT(char(12),BOLZ,14) AS TimeThru
           , CONVERT(char(12),BOLN,14) AS Duration
           , Status
        FROM #DBAZ
    ORDER BY Batch

    END

DROP TABLE #DBAT

DROP TABLE #DBAZ

SET NOCOUNT OFF

RETURN (@Status)

----------kad kasnije idem na Modify odavde do kraja nedostaje----------------------

GO

DECLARE @Task varchar(1000)
DECLARE @Work varchar(2000)

SET @Task = ' PRINT ' + CHAR(39) + '7.0' + CHAR(39)
          + ' PRINT ' + CHAR(39) + '1'   + CHAR(39)
          + ' PRINT ' + CHAR(39) + '1 SQLCHAR 0 8000 ' + CHAR(39) + ' + CHAR(34) + ' + CHAR(39) + '\r\n' + CHAR(39) + ' + CHAR(34) + ' + CHAR(39) + ' 1 Line SQL_Latin1_General_CP1_CI_AS' + CHAR(39)

SET @Work = 'osql -E -Q "' + @Task + '" -o "C:\File.fmt" -s "" -w 8000'

EXECUTE master.dbo.xp_cmdshell @Work, NO_OUTPUT

GO

----Roberto----
 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: izvršavanje SQLQUERY-a08.01.2007. u 12:58 - pre 208 meseci
zaboravio sam napisati iako mislim da nema uopče veze, na jednom računalu je sql server 2005 express edition sa svim onim dodacima (Advanced Services) a na drugom je bez toga...
----Roberto----
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
*.static.sbb.co.yu.

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: izvršavanje SQLQUERY-a08.01.2007. u 13:13 - pre 208 meseci
Proverio sam jos jednom, procedura na netu i ona koju ja koristim su identicne.

Zanimljivo zapazanje, kod na kraju zaista nedostaje (nema ga ni kod mene), mada je on u svakom slucaju suvisan, nikada se ionako ne bi izvrsio.

U svakom slucaju, ne znam sta da ti kazem. Jedino sto je razlika je sto ja koristim SQLServer 2000, mada to ne bi trebalo nista da menja, koliko znam, postoji full backward compatibility...

Ajd nek se jos neko ukljuci... Zasto kod kod njega ne radi, a kod mene radi odlicno (vec dugo ga koristim)? Da li problem zbog 2005-ice?
Every hamster has his day.
 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: izvršavanje SQLQUERY-a08.01.2007. u 14:06 - pre 208 meseci
e da, bilo bi dobro kad bi još netko tko ima recimo 2000 sql server to probao, i eventualno (iako sam ja probao na dva računala gdje je 2005) netko tko ima 2005, pa da vidimo što će biti,a ja nemam uopče sql servera 2000, jer da imam sad bi ga isao isprobati da vidim što je u krivu, znači ovaj iznad kod iskopirati i kreira se procedura te onda vidjeti dal će se moći pozvati sql query, i dal će se taj fajl kreirat!

nego ne kužim sad u kojem djelu se onda uopće kreira taj fajl, (File.fmt) - koji dio procedure? ja sam mislio da se kreira u ovom koji kad idem na modify nedostaje, zato sam i probao taj dio sam izvršavati, al svejedno nije ništa bilo,

e daj mi molim te pošalji mailom taj File.fmt, pa ću ga ja probat promjenit(ako se može kako) i stavit na lokaciju koju ću koristit u proceduri, jer mi sve prođe dobro al mi veli da fali ta datoteka nedostaje, već sam ju ja pokušao kreirat na razne načine no kad postoji onda javi neku drugu grešku ne znam već napamet, vjerojatno zato što nije sadržaj bio dobar, tj ne znam ni što treba bit u njoj, pa ću probat promjeniti sadržaj tvoje da odg.mojoj konfiguraciji!



[Ovu poruku je menjao roberto555 dana 08.01.2007. u 16:38 GMT+1]
----Roberto----
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
*.static.sbb.co.yu.

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: izvršavanje SQLQUERY-a08.01.2007. u 14:48 - pre 208 meseci
Evo okacicu ga ovde, ako jos neko ima isti problem da vidmo.
Every hamster has his day.
Prikačeni fajlovi
 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: izvršavanje SQLQUERY-a08.01.2007. u 16:09 - pre 208 meseci
u tom file-u piše:

Code:

7.0
1
1 SQLCHAR 0 8000 "\r\n" 1 Line SQL_Latin1_General_CP1_CI_AS


i pretpostavljam da to u datoteku upiše u onom dijelu koji fali kad se kasnije ide na modify, evo:

Code:

GO

DECLARE @Task varchar(1000)
DECLARE @Work varchar(2000)

SET @Task = ' PRINT ' + CHAR(39) + '7.0' + CHAR(39)
          + ' PRINT ' + CHAR(39) + '1'   + CHAR(39)
          + ' PRINT ' + CHAR(39) + '1 SQLCHAR 0 8000 ' + CHAR(39) + ' + CHAR(34) + ' + CHAR(39) + '\r\n' + CHAR(39) + ' + CHAR(34) + ' + CHAR(39) + ' 1 Line SQL_Latin1_General_CP1_CI_AS' + CHAR(39)

SET @Work = 'osql -E -Q "' + @Task + '" -o "C:\Program Files\Microsoft SQL Server\File.fmt" -s "" -w 8000'

EXECUTE master.dbo.xp_cmdshell @Work, NO_OUTPUT

GO


i sad sam ja ovu tvoju stavio na C:\Program Files\Microsoft SQL Server\ ,i pokrenuo procedru sa parametrom 'D:\upit.sql' i sad se više ne javi ona greška, već se javi greška kod izvršavanja upita, upit bi trebao kreirat novi login,i sad je tu bacio par čudnih errora (upit je u redu jer kad ga pokrenm normalno kreira login), malo sam bolje proučavao stranicu na kojoj je opis za tu proceduru, i ispod pod kraj stranice u dijelu "o autoru"


About the author: Brian Walker is a senior database architect in an IS department that uses SQL Server 2000 and the .NET Framework.....


i sad mislim da je to prvobitno rađeno za sql server 2000, a u tu datoteku također koliko sam skužio iz procedure (tu iznad) za kreiranje tog fajla, uvijek upiše te podatke, znači bez obzira na računalo, inst.sql ... tako da mislim da bi u tom fajlu sad za sql server 2005 trebalo nešto drugo pisati jer vjerojatno ne paše to sa 2000, pa zato meni javi greška u samom upitu, jer vjerojatno nešto ne pročita ispravno, pa ga zato nemože izvršiti, e sad samo da mi je znati što znači to u tom fajlu, da se nekako pokuša prebacit za 2005 to isto, ne znam ni sam,... iako je i onda pitanje dal će radit,tj.dal to uopče može radit na kojem drugom osim 2000!!!
----Roberto----
 
Odgovor na temu

BezPanike

Član broj: 128571
Poruke: 74



+2 Profil

icon Re: izvršavanje SQLQUERY-a09.01.2007. u 08:33 - pre 208 meseci
Meni bez problema radi na 2005, kad "peške" kreiram D:\File.fmt, tako kako ga je Fedya okačio.

Izgleda da je problem do tvog upita.

Probaj sa nečim jednostavnim:

Code:

USE [master]
GO

SELECT * FROM dbo.spt_values
GO


... pa vidi da li će raditi.
 
Odgovor na temu

roberto555
Croatia

Član broj: 64744
Poruke: 451
*.adsl.net.t-com.hr.



Profil

icon Re: izvršavanje SQLQUERY-a09.01.2007. u 11:06 - pre 208 meseci
ma jesam vec, eto to je u upitu:


Code:

use[baza]
go
insert into ulice values ('22','Ulica 22')
go

i upit radi kad ga pokrenem,
a kad idem ovako:

Code:

exec sp_ExecuteSQLFromFile 'D:\upit.sql'


onda mi kaze

Code:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ' '.
Msg 1055, Level 16, State 1, Line 1
'.b.a.z.a.' is an invalid name because it contains a NULL character or an invalid unicode character.


al u svemu tome traženju po helpu itd.. našao sam alternativu za ono što sam mislio ovo koristiti, tako da mi sad trenutno nije ni potrebno,al svejedno bih volio skužiti zašto je tako,i da jednom i proradi!!

----Roberto----
 
Odgovor na temu

[es] :: MS SQL :: izvršavanje SQLQUERY-a

[ Pregleda: 3114 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.