|
I have the following INSERT command which works well, but I need to limit what is inserted.
INSERT INTO SalesLogix.sysdba.Account SELECT * FROM DONCASTER4.SalesLogix.sysdba.Account
FYI: DONCASTER4 is a linked server.
What I need to do is only insert records where the value of the AccountId column of the source table does not already exist in the destination table.
Both tables are identical and both servers are MS SQL Server 2005.
Your help on this is appreicated.
Steve Jowett
-------------------------
It is offen dangerous to try and see someone else's point of view, without proper training. Douglas Adams (Mostly Harmless)
modified on Wednesday, February 20, 2008 5:45 AM
|
|
|
|
|
User IF NOT EXISTS
for example
IF NOT EXISTS (SELECT * FROM TblA Where AcctId = <<i>value>) INSERT INTO TblA .....
Regards
KP
|
|
|
|
|
Use IF NOT EXISTS
for example ...
IF NOT EXISTS (SELECT * FROM TblA WHERE AcctId = <<i>value>) INSERT INTO TblA .....
Regards
KP
|
|
|
|
|
Thanks for the reply KP, but I do not think you understood my problem which is I have a remote SQL Server (DONCASTER4) on to which new records are inserted into the ACCOUNT table.
Every evening I wish to make a copy of records added to the Accounts table on the DONCASTER4 server onto my master database.
Hope this clarifies what I am trying to achieve.
Regards
Steve Jowett
-------------------------
It is offen dangerous to try and see someone else's point of view, without proper training. Douglas Adams (Mostly Harmless)
|
|
|
|
|
I've got it :-
INSERT INTO SalesLogix.sysdba.ACCOUNT <br />
SELECT * <br />
FROM Doncaster4.salesLogix.sysdba.ACCOUNT AS DONCASTER<br />
WHERE NOT EXISTS(SELECT * FROM SalesLogix.sysdba.ACCOUNT AS HARTSHILL WHERE DONCASTER.ACCOUNTID = HARTSHILL.ACCOUNTID)
Thanks for your help
Steve Jowett
-------------------------
It is offen dangerous to try and see someone else's point of view, without proper training. Douglas Adams (Mostly Harmless)
|
|
|
|
|
One of our project is a content management system something like wikipedia. So I need to calculate the visitors count getting for each article. Each article in this will have a unique id. So I am looking for a best method to keep the visitor count in database.
I have a master table where article details are kept. I tried adding a column named "PageView" which will be updated each time the page is requested. This worked well when website gets very less traffic. But shows incorrect results when it's running on heavy traffic. I guess it's a row level locking issue. Is there any other better approach which can be used to keep the accurate visitor count ?
The work around which is in my mind is, putting a lock to the row when I select "PageView" for updating. Update the count and release the lock. If this is right, will the other select requests to the same row wait until the lock get released ?
|
|
|
|
|
N a v a n e e t h wrote: putting a lock to the row when I select "PageView" for updating. Update the count and release the lock
Why do you select the row and lock it? why don't you just execute a simple update ? also note that in most cases, sql server will handle locks in the best way.
can you post the code you use?
|
|
|
|
|
hspc wrote: Why do you select the row and lock it?
As you know it's a multi threading issue. Database server is multi threaded. So if two requests came at same time, the count may appear incorrect. That's what I thought of using locking.
|
|
|
|
|
Hi,
N a v a n e e t h wrote: I thought of using locking.
Thats a good idea and it will work fine.......I used same concept in one of my projects.
Regards,
Sandeep Kumar.V
|
|
|
|
|
I really believe that you don't need to do so.
this will be safe:
Update tblPages<br />
Set ViewCount = ViwCount + 1<br />
Where PageID = @PageID
this will achieve what you need and will not require any effort on your side to manage locking.
|
|
|
|
|
Hi All;
I make a stored procedure which take ane variable and i use this variable in top clause
here is my procedure
Alter proc SelectTop
@Top_No int
as select top(@Top_No)* from origainal_Msg where status=0
but it not work because i work in sql2000
and when i run sql2005 it not work also
can any body help me to make this procedure in sql2000
thank's all
Kareem Elhosseny
|
|
|
|
|
Sql server 2000 doesn't support variables in TOP clause while sql server 2005 does. That's why you are getting error in sql server 2000.
|
|
|
|
|
I don't think that you can use variables with top clause. Try something like this.
DECLARE @top NVARCHAR(10)
DECLARE @query NVARCHAR(100)
SET @top = '10'
SET @query = 'SELECT TOP ' + @top + ' * FROM YourTable'
EXECUTE SP_EXECUTESQL @query It's not a good practice to form SQL like this.
|
|
|
|
|
thank's my dear but i think it's not high performande to make this
but i have another q i create DB on sql 2000
and try to use sql 2005 for this db
but top query dont work also
Kareem Elhosseny
|
|
|
|
|
As you have been told, you cannot use a variable with TOP in SQL2000. It DOES work in SQL 2005.
See this MS help
Ypur only option for SQL2000 is, as you have already been advised, to create dynamic sql. If this is not performant enough then you will need to look at alternative methods.
Bob
Ashfield Consultants Ltd
|
|
|
|
|
Maybey this works for you:
<br />
Alter proc SelectTop<br />
(<br />
@Top_No int <br />
)<br />
as <br />
<br />
set rowcount @top_no<br />
select * from origainal_Msg where status=0<br />
Wout Louwers
|
|
|
|
|
Thank My dear It works
Kareem Elhosseny
|
|
|
|
|
hi all,
I am using sql server 2005.
I making one web form where data from one table(temporary table) is moved to three table two is header and one is detail. i would like to know is making a package is better option or directing writing procedure to move data in respective table is good. Perfomancewise which is fast.or if any other better option is there plaese guide me.
If making ssis packge is better please give me useful.
please help.
Thank you
regards
imran khan
|
|
|
|
|
i have taken application_id as the primary key...the data type is char..i have to autoincrement its value..kind suggest me the way..
|
|
|
|
|
You'll have to write some logic to do this.
But first, define the length and format of this value, for example:
aaaaa
aaaab
aaaac
or:
a
b
.
.
z
aa
ab
I believe the first is more suitable for this use, also try to rethink about using a character column as an autoincrement , using int or bigint will save a lot of effort and performs better.
|
|
|
|
|
The length is 3 and data type is char..i could have done this with int but problem with int is that when i take the value 001 it takes as 1..and my values varry between 000 to 999.
|
|
|
|
|
You should not change how you store data because of how you want to display it.
Save data the true way, let formatting to the user interface code. for example, if you use C#, you can use String.PadLeft:
int i=1;<br />
string s = i.ToString().PadLeft(3,'0');
now s contains "001"
|
|
|
|
|
hi
i am having a table with two columns ,a and b in table x .both a and b are varchar and allows nulls.
i want to insert b'day into a colun .
can any one tell me the query ......
thanks
Suman.
|
|
|
|
|
The same you have posed some time earlier.
you could have modified the same.
however, check this ....
select 'b''day'
or
set quoted_identifier off<br />
select "b'day"<br />
set quoted_identifier on
Regards
KP
|
|
|
|
|
hi
Thanks for your reply , that is working ..
|
|
|
|