Van egy nagy rendszer, amely SQL SERVER 2005-re épül és most készítenem kellett hozzá egy nagyon összetett lekérdezést. A felület egy nagy kijelzőn non-stop meg van jelenítve és a VIEW meghatározott időközönként lefut. A probléma az, hogy közben folyamatosan dolgoznak a rendszeren, számláznak, bevételeznek, stb. és nagyon zavaró, hogy ha épp egy időben futnak a dolgok és azért nem tudnak rendesen dolgozni, mert éppen frissít a tájékoztató felület.
Valami olyan megoldást szeretnék találni, ahol nem kell az összes VIEW-ba és tárolt eljárásba belemódosítani, hanem csak az enyémbe. A kérdésem az lenne, hogy lehetne-e pl. prioritást rendelni a VIEW-hoz, hogy csak akkor futtassa az SQL SERVER ha van szabad kapacitása, vagy egy bizonyos terheltség alatt van, stb. ? Vagy esetleg be lehet-e állítani, hogy mindig csak bizonyos százalékban terhelheti meg a rendszert?
Erre már rátaláltam:
USE master EXEC sp_monitor
De első körben ezzel az a bajom, hogy csak egy pillanatnyi értéket mutat és hiába tudom meg a VIEW futtatása előtt, hogy mondjuk 80% a szabad kapacitás, ha a rákövetkező másodpercben 10-en elkezdenek számlázni...
Előszőr azért kezdtem pánikolni, mert asztem, hogy valami hasonló a szitu, mint Access-nél. Ottan van Név, meg Személyi kód és, ha valami nem stimt akkor nincsen joga az adott MDB-hez.
Van egy SQL Server 2005 Express alatt üzemelt adatbázis amiből adatokat kellene kinyernem. Mikor csatolnám az Attach-al akkor hibával elszáll: "Unable to open the physical file d:AdatValami.mdf. Operating system error 5: '5(A hozzáférés megtagadva)'. (Microsoft SQL Server, Error: 5120)"
Ezzel nincs is gondom, érthető a hiba, hisz valóban nem azzal a felhasználói névvel jelentkeztem be, mint ami kell neki. Az sa-nak nálam már van egy jelszava ennek a db-nek az sa felhasználójához másik jelszó van rendelve.
Hogyan tudnám az sa jelszavát megváltoztatni úgy, hogy ezt az adatbázist használni tudjam és a régi sa Login is megmaradjon (gondolom sehogy....???).
Esetleg egy másik Server Instance (Vagy hogy is hívják amikor több névvel registrálok egy sql servert, mintha lenne ilyen lehetőség... Sajna nem szakértek a témában...) és ott felvenni azt az sa-t azzal a jelszóval, majd Attach?
Egy sima SQL hívás. Nem szórakoztam vele, hanem rábíztam a Managerre. Azzal kreáltattam meg az sql szintaxist (Script Table as=>CREATE To).
De közben okosabb lettem és utána olvasva kiderült hogy ODBC, OLE DB, ADO, ADO.NET-el való kapcsolódás esetén hiba lép fel. Ezek a GO-t nem támogatják.
Szóval lassan, de biztosan haladok előre azon a bizonyos lenini úton....:DDDDDD
Van nekem egy ilyen eljárásoam ami a szerveren futtatna lekérdezésket:
Sub RunServerSQL (SQLstr As String)
Dim sqlWS As WorkSpace Dim sqlDB As Database Dim MyQuery As QueryDef
On Error GoTo RSS_H
Set sqlWS = DBEngine.Workspaces(0) Set sqlDB = sqlWS.databases(0)
Set MyQuery = sqlDB.CreateQueryDef("") MyQuery.connect = SQLConnectStrUzlet MyQuery.returnsrecords = False
MyQuery.SQL = SQLstr
MyQuery.Execute
Set MyQuery = Nothing 'sqlDB.Close
'Set sqlDB = Nothing 'Set sqlWS = Nothing
Exit Sub RSS_H: MsgBox Err & ": " & Error$, 16, cv$ Exit Sub End Sub
Az SQLStr a következő lenne:
USE [Uzlet] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[ProbaTabla1]( [ID] [int] IDENTITY(1,1) NOT NULL, [Megnevezes] [varchar](50) COLLATE Hungarian_CI_AS NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF
Amikor futtatom akkor ezt írja ki nekem:
3146: ODBC--a hívás nem sikerült. [Microsoft][SQL Native Client][SQL Server]Incorrect syntax near 'GO'. (#102) [Microsoft][SQL Native Client][SQL Server]Incorrect syntax near 'GO'. (#102) [Microsoft][SQL Native Client][SQL Server]Incorrect syntax near 'G O'. (#102) [Microsoft][SQL Native Client][SQL Server]Incorrect syntax near 'GO'. (#102) [Microsoft][SQL Native Client][SQL Server]Incorrect syntax near the keyword 'SET'. (#156)
A problémák nagyrészét az okozta, hogy az SQL Server oldalon lévő paramétereket kevertem a delphi oldalon lévő paraméterekkel. De már képbe kerültem:D Éljen a megvilágosodás!
hihetettlen vagy komolyan mondom. ennyire faj megnezned a doksijaba, vagy az example-kbe???? Jesszusom...
query := TSQLQUERY.Create(NIL); sql :='SELECT X FROM Y WHERE Z = :Var'; query.SQL.Text := sQl; query.ParamByName('Var').AsString := 'SZANALOM'; query.Open;
Én is erre jutottam, hogy @ a nyerő. Viszont delphi alól is...??? Ott mintha meg a : működne... Vagy a : a delphi paraméter értelmezése (vagyis inkább az adott query komponensnek az értelmezése) és a server felé már másképpen nyomja tovább a lekérdezést?
pl. a TCustomSQLDataSet.ParamByName (vagy bármely osztály ParamByName-je...) a :-at műkszik együtt vagy a @-al?
Akkor amondó vagyol, hogy a paramétert SQLServer esetében is :-al írom és nem amit látni véltem Transact SQL-ben ami @-al volt és ami a példa lekérdezésemben is szerepelt?
ADOQuery1.sql.add('select .... where x = :x'); ADOQuery1.paramByName('x').Value = 'valami';
persze elotte close, clear meg mittomen.
Ha azt akarod, hogy a db oldalon is kepzodjon ehhez egy prepared query, akkor valahogy ugy hozol letre 1 prepared query-t (megnezed doksit). Mert ezzel csak lokalisan keszitesz elo egy lekerdezest, de jobb adatbazisok tamogatnak prepared query-ket is, aminek elonye, hogy eltaroljak memoba a es nem kell mindig ujra es ujra feldolgozniuk a string-et, csak a parametereket cserelgetik le benne. Ez tobbnyire akkor erdekes, ha sokszor egymas utan ugyan az a query fut le csak mas mas parameterekkel, es meg szeretnenk sporolni a adatbazis sql parser idejet, ami nyilvan egy egyszeru query-nel teljesen felesleges, az a micro secundum nem igazan merheto, de egy komlyabb sok 100 karakteres, es osszetett lekerdezes-nel mar lehet ertelme.
Asztem, hogy, ha a server oldalon csinálok egy lekérdezést akkor nekem már tsak a params (vagy valami hasonló tömbön keresztül) hozzáférek progiból és tsak beállítom az értéket.
pl.
sql kód: (Asszem ez már válasz is a paraméteres lek. kérdésemre:))
SELECT * FROM dbo.Employees WHERE EmployeeID = @EmployeeID
Sziasztok.
Hogyan tudok paraméteres lekérdezést létrehozni SQLServer 2005 alatt (amit majd programból paraméterezgetek, hogy mire kell szűrni)?
Egy minta példának örülnék...
THX előre is.
ZB
mire is gondolsz pontosan? Mit akarnal elvallasztani mivel? valtozoba IS irhatsz enter-el formazva set @sql = 'valami ujsorba masik valami esvegul = ''+@ertek+''
esetleg egy minimalis mssql doksit atnezhetsz, az sokat segit altalaban