<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlserver.ro/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>T-SQL</title><link>http://sqlserver.ro/forums/15/ShowForum.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Re: un alt Script...o alta provocare</title><link>http://sqlserver.ro/forums/thread/1838.aspx</link><pubDate>Fri, 16 Feb 2007 10:57:29 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:1838</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/1838.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=1838</wfw:commentRss><description>&lt;P&gt;multumesc mult Razvan......intradevar....baza de date e groaznica....daca iti vine sa crezi nu are absolut nici un FK definit pe ea......in plus exista tabele care nu au nici macar un PK.....asa am primit-o si eu......si ce e si mai groaznic este ca nu exista codul aplicatiei care foloseste aceasta baza de date.....ca poate atunci m-as fi bagat mai adanc in ea......atat cat ma pricep si eu........multe lucruri care se executa pe aceasta baza (insert,update,delete,select) se fac din codul aplicatiei neexistand cum zic eu ca ar fi normal proceduri in baza pt acestea (insert,update,delete,select)....acum poate ma intelegeti cu ce ma lupt zilnic...si-mi mananc creierii.....&lt;/P&gt;
&lt;P&gt;&amp;nbsp;dar cum bine se zice....."ce nu te omoara te intareste".....cel putin asa sper sa fie :)&lt;/P&gt;
&lt;P&gt;o sa incerc sa-ti raspund la intrebari:&lt;/P&gt;
&lt;P&gt;1.intradevar legatura intre tabele se face ON QASLogInfoProba.QASUserName = QASUser.UserIdentification....nu are FK intre ele.....dar o sa fac..&lt;/P&gt;
&lt;P&gt;2.QASItemType contine intredevar tipul evenimentului respectiv Logon sau Logoff adica la o anumita data QASItemTime am Logon dupa care pt acelasi QASUserName am Logoff....fiind posibil ca este user sa faca in accesi zi mai multe Logon/Logoff....pe diferite sau pe aceesi QASStation&lt;/P&gt;
&lt;P&gt;inregistrand un QASLiCounter pt fiecare&lt;/P&gt;
&lt;P&gt;3.cred ca a fost impartita astfel pe CycleTime_L01...L02 etc si nu doar o tabela CycleTime...pt ca fiecare aceasta L01,L02 contine undeva pe la 1 milion de inregistrari&lt;/P&gt;
&lt;P&gt;ideea de fetchuire pica pt ca am incercat ceva asemanator si dupa ce am asteptat aprox 15 min.....l-am oprit......cred ca nu este posibila o fetchuire pe asemenea tabele&lt;/P&gt;
&lt;P&gt;&amp;nbsp;in concluzie nu stiu exact cum am sa reusesc :(&lt;/P&gt;</description></item><item><title>Re: un alt Script...o alta provocare</title><link>http://sqlserver.ro/forums/thread/1829.aspx</link><pubDate>Thu, 15 Feb 2007 20:23:17 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:1829</guid><dc:creator>rsocol</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/1829.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=1829</wfw:commentRss><description>&lt;p&gt;Mai întâi, avem următoarele probleme:&lt;/p&gt;&lt;p&gt;1. Care e legătura dintre tabelele QASLogInfoProba şi QASUserProba ? Cred că e vorba de QASUserName, care ar fi trebuit să fie un foreign key spre UserIdentification, dar nu poate fi, deoarece tipurile de date sunt diferite.&lt;/p&gt;&lt;p&gt;2. Cum se reprezintă logon şi logoff în tabela QASLogInfo, pentru că văd o singură coloană de tip datetime. Cumva QASItemType reprezintă tipul evenimentului ?&lt;/p&gt;&lt;p&gt;3. Ideea de a avea tabele separate "CycleTimes_L01", "CycleTimes_L02", etc este în contradicţie cu regulile de normalizare a bazelor de date. Ar fi trebuit să existe o singură tabelă CycleTimes, iar L01, L02, etc să fie nişte valori într-o coloană a acestei tabele.&lt;br&gt;&lt;/p&gt;&lt;p&gt;Dacă am fi avut nişte tabele mai normale, query-ul putea să fie de genul următor:&lt;/p&gt;&lt;p&gt;SELECT UserName, ComponentName, &lt;br&gt;SUM(DurationInSeconds) as TotalDurationInSeconds&lt;br&gt;FROM Users u INNER JOIN Sessions s ON u.UserID=s.UserID&lt;br&gt;INNER JOIN CycleTimes t ON s.Station=t.Station&lt;br&gt;INNER JOIN Components c ON c.ComponentID=t.ComponentID&lt;br&gt;GROUP BY UserName, ComponentName&lt;/p&gt;&lt;p&gt;În condiţiile în care trebuie să lucrezi cu tabele nenormalizate, cu foreign key-uri care lipsesc şi cu informaţii care sunt ascunse ca ultimele 3 caractere dintr-o coloană, eu personal nu vreau să dau o soluţie completă pentru aşa ceva. În principiu, poţi folosi cursoare, dynamic sql şi tabele temporare ca să rezolvi orice, dar soluţia corectă porneşte de la o structură sănătoasă a bazei de date şi am impresia că asta lipseşte în primul rând. Cu structura existentă, codul ar putea fi de genul următor:&lt;/p&gt;&lt;p&gt;DECLARE Utilizatori CURSOR FOR&lt;br&gt;SELECT UserIdentification FROM QASUserProba&lt;br&gt;&lt;/p&gt;&lt;p&gt;WHILE 1=1 BEGIN&lt;/p&gt;&lt;p&gt;&amp;nbsp; FETCH NEXT FROM Utilizator INTO @Utilizator&lt;br&gt;&amp;nbsp; IF @@FETCH_STATUS&amp;lt;&amp;gt;0 BREAK&lt;br&gt;  &lt;/p&gt;&lt;p&gt;&amp;nbsp; DECLARE Statii CURSOR FOR&lt;br&gt;&amp;nbsp; SELECT QASStation FROM QASLogInfoProba WHERE QASUserName=@Utilizator&lt;/p&gt;&lt;p&gt;&amp;nbsp; WHILE 1=1 BEGIN&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FETCH NEXT FROM Statii INTO @Statie&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF @@FETCH_STATUS&amp;lt;&amp;gt;0 BREAK&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DECLARE @SQL nvarchar(4000)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @SQL='&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; INSERT INTO #Temp&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; SELECT '''+@Utilizator+''', '''+@Statie+''', NumeComponenta, SUM(timeInWsSeconds)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; FROM CycleTimes_'+@Statie+' WHERE QASStation='''+@Statie+''' AND ???&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GROUP BY NumeComponenta&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXEC (@SQL)&lt;/p&gt;&lt;p&gt;&amp;nbsp; END&lt;br&gt;END&lt;/p&gt;&lt;p&gt;Evident, codul de mai sus e incomplet, vulnerabil la SQL Injection, neperformant şi într-un cuvânt, groaznic. Cel mai bine e să corectezi structura bazei de date, chiar dacă poţi să-l completezi ca să fie acceptabil.&lt;/p&gt;&lt;p&gt;Răzvan&lt;/p&gt;</description></item><item><title>un alt Script...o alta provocare</title><link>http://sqlserver.ro/forums/thread/1824.aspx</link><pubDate>Thu, 15 Feb 2007 11:45:08 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:1824</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/1824.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=1824</wfw:commentRss><description>&lt;P&gt;salut...am urmatoarele tabele&lt;/P&gt;
&lt;P&gt;CREATE TABLE [dbo].[QASUsersProba] (&lt;BR&gt;&amp;nbsp;[UserIdentification] [varchar] (150)&amp;nbsp; NOT NULL ,&lt;BR&gt;&amp;nbsp;[UserLevel] [int] NOT NULL ,&lt;BR&gt;&amp;nbsp;[DateCreated] [datetime] NULL ,&lt;BR&gt;&amp;nbsp;[Status] [bit] NULL &lt;BR&gt;) ON [PRIMARY]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;ALTER TABLE [dbo].[QASUsersProba] WITH NOCHECK ADD &lt;BR&gt;&amp;nbsp;CONSTRAINT [PK_QASUsersProba] PRIMARY KEY&amp;nbsp; CLUSTERED &lt;BR&gt;&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;[UserIdentification]&lt;BR&gt;&amp;nbsp;) WITH&amp;nbsp; FILLFACTOR = 90&amp;nbsp; ON [PRIMARY] &lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;ALTER TABLE [dbo].[QASUsersProba] WITH NOCHECK ADD &lt;BR&gt;&amp;nbsp;CONSTRAINT [DF_QASUsersProba_DateCreated] DEFAULT (getdate()) FOR [DateCreated]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;CREATE TABLE [dbo].[QASLogInfoProba] (&lt;BR&gt;&amp;nbsp;[QASLICounter] [int] IDENTITY (1, 1) NOT NULL ,&lt;BR&gt;&amp;nbsp;[QASItemTime] [datetime] NOT NULL ,&lt;BR&gt;&amp;nbsp;[QASUserName] [varchar] (50)&amp;nbsp; NOT NULL ,&lt;BR&gt;&amp;nbsp;[QASItemType] [varchar] (50)&amp;nbsp; NOT NULL ,&lt;BR&gt;&amp;nbsp;[QASStation] [varchar] (50)&amp;nbsp; NULL &lt;BR&gt;) ON [PRIMARY]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;ALTER TABLE [dbo].[QASLogInfoProba] WITH NOCHECK ADD &lt;BR&gt;&amp;nbsp;CONSTRAINT [PK_QASLogInfoProba] PRIMARY KEY&amp;nbsp; CLUSTERED &lt;BR&gt;&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;[QASLICounter]&lt;BR&gt;&amp;nbsp;) WITH&amp;nbsp; FILLFACTOR = 90&amp;nbsp; ON [PRIMARY] &lt;BR&gt;GO&lt;BR&gt;-------------------------------------------------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;CREATE TABLE [dbo].[CycleTimes_L01] (&lt;BR&gt;&amp;nbsp;[CTCounter] [int] IDENTITY (1, 1) NOT NULL ,&lt;BR&gt;&amp;nbsp;[assemblyPaletteID] [varchar] (16)&amp;nbsp; NOT NULL ,&lt;BR&gt;&amp;nbsp;[SerialNumber] [varchar] (25)&amp;nbsp; NULL ,&lt;BR&gt;&amp;nbsp;[startTime] [datetime] NOT NULL ,&lt;BR&gt;&amp;nbsp;[endTime] [datetime] NOT NULL ,&lt;BR&gt;&amp;nbsp;[timeInWsSeconds] [int] NULL ,&lt;BR&gt;&amp;nbsp;[APLCounter] [int] NULL ,&lt;BR&gt;&amp;nbsp;[QASStation] [nvarchar] (3)&amp;nbsp; NULL ,&lt;BR&gt;&amp;nbsp;[QASLICounter] AS ([dbo].[FgetQASLICounter]([endtime], [QASStation])) ,&lt;BR&gt;) ON [PRIMARY]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;ALTER TABLE [dbo].[CycleTimes_L01] WITH NOCHECK ADD &lt;BR&gt;&amp;nbsp;CONSTRAINT [PK_CycleTimes_L01] PRIMARY KEY&amp;nbsp; CLUSTERED &lt;BR&gt;&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;[CTCounter]&lt;BR&gt;&amp;nbsp;) WITH&amp;nbsp; FILLFACTOR = 90&amp;nbsp; ON [PRIMARY] &lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;ALTER TABLE [dbo].[CycleTimes_L01] WITH NOCHECK ADD &lt;BR&gt;&amp;nbsp;CONSTRAINT [DF_CycleTimes_L01_QASStation] DEFAULT ('L01') FOR [QASStation]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;----------------------------------&lt;/P&gt;
&lt;P&gt;CREATE TABLE [dbo].[CycleTimes_L02] (&lt;BR&gt;&amp;nbsp;[CTCounter] [int] IDENTITY (1, 1) NOT NULL ,&lt;BR&gt;&amp;nbsp;[assemblyPaletteID] [varchar] (16)&amp;nbsp; NOT NULL ,&lt;BR&gt;&amp;nbsp;[SerialNumber] [varchar] (25)&amp;nbsp; NULL ,&lt;BR&gt;&amp;nbsp;[startTime] [datetime] NOT NULL ,&lt;BR&gt;&amp;nbsp;[endTime] [datetime] NOT NULL ,&lt;BR&gt;&amp;nbsp;[timeInWsSeconds] [int] NULL ,&lt;BR&gt;&amp;nbsp;[APLCounter] [int] NULL ,&lt;BR&gt;&amp;nbsp;[QASStation] [nvarchar] (3)&amp;nbsp; NULL ,&lt;BR&gt;&amp;nbsp;[QASLICounter] AS ([dbo].[FgetQASLICounter]([endtime], [QASStation])) ,&lt;BR&gt;) ON [PRIMARY]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;ALTER TABLE [dbo].[CycleTimes_L02] WITH NOCHECK ADD &lt;BR&gt;&amp;nbsp;CONSTRAINT [PK_CycleTimes_L02] PRIMARY KEY&amp;nbsp; CLUSTERED &lt;BR&gt;&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;[CTCounter]&lt;BR&gt;&amp;nbsp;) WITH&amp;nbsp; FILLFACTOR = 90&amp;nbsp; ON [PRIMARY] &lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;ALTER TABLE [dbo].[CycleTimes_L02] WITH NOCHECK ADD &lt;BR&gt;&amp;nbsp;CONSTRAINT [DF_CycleTimes_L02_QASStation] DEFAULT ('L02') FOR [QASStation]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;--------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;CREATE TABLE [dbo].[N_CompName] (&lt;BR&gt;&amp;nbsp;[ID_CompName] [int] IDENTITY (1, 1) NOT NULL ,&lt;BR&gt;&amp;nbsp;[Seria] [varchar] (10)&amp;nbsp; NULL ,&lt;BR&gt;&amp;nbsp;[Nume] [nvarchar] (50)&amp;nbsp; NULL ,&lt;BR&gt;&amp;nbsp;[recData] [datetime] NULL ,&lt;BR&gt;&amp;nbsp;[recUser] [nvarchar] (50)&amp;nbsp; NULL ,&lt;BR&gt;&amp;nbsp;[recStation] [nvarchar] (50)&amp;nbsp; NULL &lt;BR&gt;) ON [PRIMARY]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;ALTER TABLE [dbo].[N_CompName] WITH NOCHECK ADD &lt;BR&gt;&amp;nbsp;CONSTRAINT [PK_N_CompName] PRIMARY KEY&amp;nbsp; CLUSTERED &lt;BR&gt;&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;[ID_CompName]&lt;BR&gt;&amp;nbsp;) WITH&amp;nbsp; FILLFACTOR = 90&amp;nbsp; ON [PRIMARY] &lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;ALTER TABLE [dbo].[N_CompName] WITH NOCHECK ADD &lt;BR&gt;&amp;nbsp;CONSTRAINT [DF__N_CompNam__recDa__0E8E2250] DEFAULT (getdate()) FOR [recData],&lt;BR&gt;&amp;nbsp;CONSTRAINT [DF__N_CompNam__recUs__0B7CAB7B] DEFAULT (suser_sname()) FOR [recUser],&lt;BR&gt;&amp;nbsp;CONSTRAINT [DF__N_CompNam__recSt__086B34A6] DEFAULT (host_name()) FOR [recStation]&lt;BR&gt;GO&lt;/P&gt;
&lt;P&gt;------------------------------------&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;Trebuie sa iau &lt;STRONG&gt;UserIdentification&lt;/STRONG&gt; din tabela QASUserProba adica fiecare utilizator sa verific perioada de timp&lt;BR&gt;in care a fost logon si logoff in functie de fiecare zi verific daca a fost logat pe mai multe statii &lt;STRONG&gt;QASStation&lt;/STRONG&gt; din QASLogInfo&lt;BR&gt;...iau aceste QASStation si ma duc in CycleTimes_(QASStation) (Exemplu: CycleTimes_L01&amp;nbsp;sau L02.....pt N statii) intru in ea si calculez(adun) &lt;STRONG&gt;timeInWsSeconds&lt;/STRONG&gt; pe ziua respectiva pt acel QASLiCounter pe fiecare QASStation iau si SerialNumber ultimele 3 si scot din N_CompName &lt;BR&gt;Nume-le respectivului Componenet pe care a lucrat&lt;/P&gt;
&lt;P&gt;cum pot scoate aceste rezultate .....ma intereseaza mai mult cum pot parametriza in functie de CycleTimes_(QASStation....L01...L02...) ca sa treaca pe unde trebuie si sa calculeze timpul de lucru.&lt;/P&gt;
&lt;P&gt;e destul de greu de explicat....nu ma certati daca nu intelegeti nimic din intrebarea mea....e vina mea recunosc....dar de multe ori in timp ce va scriam o intrebare.....gaseam si raspunsul la ea :).....mi se clarificau si mie lucrurile mai bine....:)))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>