July 15, 2010 at 6:42 am
jon pill (7/15/2010)
drop table #TodayRecords
Is this the fastest way, i will have over a 100 lines and will be calling sql every 500ms?
Why would you want to run the code 120 times every minute when the data only changes 100 times per day?
Anyway, here's a set of statements which is a mishmash of the contributions so far. The local temporary table is no longer referenced which means dipping into the table twice. Test to see if this is adequate.
DECLARE @MinTtlTrades INT
SELECT @MinTtlTrades = MAX(TotalTrades) - 1000
FROM DBVaskVbid WITH (NOLOCK)
WHERE BarStamp >= dateadd(dd, datediff(dd, cast('1900-01-01' as datetime), getdate()), cast('1900-01-01' as datetime)
SELECT MAX(upvolume),
MAX(downvolume),
MIN(upvolume),
MIN(downvolume)
FROM DBVaskVbid WITH (NOLOCK)
WHERE BarStamp >= dateadd(dd, datediff(dd, cast('1900-01-01' as datetime), getdate()), cast('1900-01-01' as datetime)
AND TotalTrades > @MinTtlTrades
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
July 15, 2010 at 7:26 am
Thank you very much, I was having trouble with permissions on that query as I connect remotely to SQL
there will be approx 58,000 records a day and be called 2 times a second.
the input will also be twice a second
I will see what happens 🙂
July 15, 2010 at 7:32 am
How long does the query take to run?
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
July 15, 2010 at 9:06 am
jon pill (7/15/2010)
Really sorry about this,But I can only run the query once
Msg 2714, Level 16, State 6, Line 1
There is already an object named '#TodayRecords' in the database.
I would like to run this many times a day, how can I clear the object?
Are you going to keep connection open between runs?
I believe not, therefore this problem shouldn't worry you, as temp table life-span is only within connection and it will be dopped automatically. For testing, you can add drop table statement...
Depending on data volume in your real table, using # temp table may help performance.
July 15, 2010 at 9:19 am
I am running the query from Chris, it does not take long, not sure how long but I do notice some delay.
I keep the connection open at the moment, so I would need to change permissions to run temp table, which i don't know how to do
I am looking at how to do it, I hope i can run the other query
thanks
July 15, 2010 at 9:23 am
jon pill (7/15/2010)
I am running the query from Chris, it does not take long, not sure how long but I do notice some delay.I keep the connection open at the moment, so I would need to change permissions to run temp table, which i don't know how to do
I am looking at how to do it, I hope i can run the other query
thanks
Easiest way if you're using a SQL Server client is
set statistics time on
select GETDATE() -- replace with your query
set statistics time off
then check the messages tab
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
July 15, 2010 at 9:55 am
SQL Server Execution Times:
CPU time = 32 ms, elapsed time = 23 ms.
(1 row(s) affected)
SQL Server Execution Times:
CPU time = 15 ms, elapsed time = 17 ms.
Thats for Chris's Query
And for Eugene
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 2 ms.
SQL Server Execution Times:
CPU time = 47 ms, elapsed time = 57 ms.
(86776 row(s) affected)
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server Execution Times:
CPU time = 78 ms, elapsed time = 79 ms.
SQL Server Execution Times:
CPU time = 78 ms, elapsed time = 80 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
(1 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 8 ms.
July 15, 2010 at 1:38 pm
jon pill (7/15/2010)
Really sorry about this,But I can only run the query once
Msg 2714, Level 16, State 6, Line 1
There is already an object named '#TodayRecords' in the database.
I would like to run this many times a day, how can I clear the object?
You shouldn't have to drop the object called #TodayRecords if the connection is dropped. Temp tables will drop automatically once a session is ended. Where are you getting this message from... SSMS or the application?
--Jeff Moden
Change is inevitable... Change for the better is not.
July 15, 2010 at 2:11 pm
SQL messaging
Without drop table I can only run once
July 16, 2010 at 5:06 am
jon pill (7/15/2010)
SQL messagingWithout drop table I can only run once
Jon, it is something wrong in a way you executing it.
It looks like you have connection open between execution. It doesn't look right! As mentioned by myself and Jeff, temp table is dropped automaticaly when connection closes. What exactly are you using to execute this query?
July 16, 2010 at 6:17 am
SELECT upvolume,downvolume,TotalTrades
INTO #TodayRecords
FROM DBVaskVbid WITH (NOLOCK) -- are you fully awre of what this hint does?
WHERE BarStamp >= '7/14/2010'
-- do you have huge vlume of records per day, than the following index might help
CREATE INDEX idx_TodayRecords ON #TodayRecords(TotalTrades)
DECLARE @MinTtlTrades INT
SELECT @MinTtlTrades = MAX(TotalTrades) - 1000 FROM #TodayRecords
SELECT MAX(upvolume), MAX(downvolume), MIN(upvolume), MIN(downvolume)
FROM #TodayRecords
WHERE TotalTrades > @MinTtlTrades
I run this code from SQL server, New > query, I can run once only, if Drop Table is inserted I can run many times
I also send SQL the query from another program using the same ID that I log in with to SQL, but remotely, I get the error message that I don't have permission to Drop table's.
I don't not drop the Connection after I have opened it,only when i close the app.
From a c# application
using System.Data.OleDb;
using System.Data.SqlClient;
private string ConnectionString = @"data source=SERVER2\SQLEXPRESS;initial catalog=Trader;user id=Jon;password=Jon";
dbconnection =new SqlConnection(ConnectionString);
dbconnection.Open();
Then query
sSQL = "DECLARE @MinTtlTrades INT ";
using (SqlCommand myCommand = new SqlCommand(sSQL,dbconnection))
{
SqlDataReader reader = myCommand.ExecuteReader();
if (reader.Read())
{
if (!reader.IsDBNull(0))volumeupmin=((int)reader.GetValue(0));
}
reader.Close();
}
I only dispose when closing the application
public override void Dispose()
{
base.Dispose();
// clase the db connection at the end
if (dbconnection != null) {
dbconnection.Close();
dbconnection = null;
}
}
Else I am opening and closes many times and does not seem proper to do so
July 16, 2010 at 6:28 am
jon pill (7/16/2010)
1.
...
I run this code from SQL server, New > query, I can run once only, if Drop Table is inserted I can run many times
...
2.
...
Else I am opening and closes many times and does not seem proper to do so
...
1. While you're testing the query in SQL Management Studio, you will need to drop temp table before each run, so you can have DROP TABLE statement at the end of your query.
2. Why do you think it is not proper to do so? Actually, it is opposite!
Where have you found the information advising you to keep connection open during application life-span?
Good practice working with SQL Server database from client application is to close the connection straight away after your query executes.
Keeping connection open during the application life-span is usually very bad practice.
Have you heard anything about connection pooling?
July 16, 2010 at 7:22 am
I am not a SQL expert just things I have picked up to do simple queries.
I don't know about connection pooling either, but I will read up on it
July 16, 2010 at 7:28 am
jon pill (7/16/2010)
I am not a SQL expert just things I have picked up to do simple queries.I don't know about connection pooling either, but I will read up on it
Jon, are you permitted to create/amend stored procedures? What about tables?
Why does the code have to be run twice per second when the returned values will change little in that time?
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden
July 16, 2010 at 5:40 pm
SELECT min(upvolume),min(downvolume),Max(upvolume),Max(downvolume)
FROM
(SELECT upvolume,downvolume,TotalTrades from DBVaskVbid WITH (NOLOCK) where CAST(BarStamp AS DATE()) = CAST(GETDATE() AS DATE())) as XDtable
WHERE TotalTrades
BETWEEN
(SELECT MAX(TotalTrades)FROM DBVaskVbid WITH (NOLOCK)) -1000
AND
(SELECT MAX(TotalTrades)FROM DBVaskVbid WITH (NOLOCK))
Viewing 15 posts - 31 through 45 (of 46 total)
You must be logged in to reply to this topic. Login to reply