We will be using SQL Compact Edition in our application. We are doing some tests to make sure that SQL Compact is suitable for our requirments.
Our problem is with Primary keys and how to maintain data integrity since we will have 100+ clients inserting, updating, and synchronizing with SQL Server.
Can we control Identity range?
Shall we use UniqueIdentifires insted of int?
How can we detect errors at the client side? (For example, if two clients are trying to synchronize 2 columns with the same primary key value)
I am fairly new to SQL, so I have a few questions that may sound odd. First of all, I am trying to restrict users to putting in a three character code as an id item, or their team abbreviation. Here is the table definition:
CREATE TABLE TEAMS{ city varchar(20) NOT NULL, name varchar(20) NOT NULL, id varchar(3) NOT NULL};
Here is my code for adding the constraint
ALTER TABLE TEAMS ADD CONSTRAINT Chk_id CHECK (id = `[A-Z][A-Z][A-Z]`);
Here is the error that I get when trying to execute this statement:
Msg 547, Level 16, State 0, Line 1 ALTER TABLE statement conflicted with COLUMN CHECK constraint 'Chk_id'. The conflict occurred in database 'statbookdb', table 'cabateams', column 'id'.
I am using SQL 2005 EM if this makes any difference.
My other question is in regards to once the constraints have been put in. Is there a way to make SQL throw a message out when a user violates a constraint? Right now, I have a numerical constraint in and whenever I violate it, all that happens is a "This page cannot be displayed" error. It doesn't make sense if you can only do this on the front end, as I don't see the point in enforcing it on the backend if there is no way to notify the user.
im having a bit of a problem displaying the integrity constraints i have set. I need to show the table name, contraint name and contraint type, but i cant find out how to do this anywhere.
Two ways to do this... Creating the constraints when creating the data model OR using SQL to use the 'reference' constraint. Does 2005 provide any other automated method of creating the Primary Key - to Foreign key constraints without writing the SQL to do this?
I have created a simple package to load an Excel Spreadsheet into a SQL Server table. There is a one to one relationship between the columns in the .xls file and the columns in the DB record. I am getting integrity constraint errors when I try to load all numeric data from the spreadsheet (defined as Category General in excel, not defined as numeric but consisting of all numeric characters) into a column defined as (nvarchar(20), not null) in SQL Server Management Studio. There are no constraints on the column.
I have been able to temporarily bypass the offending rows, but I do need to load them into SQL Server. The problem column has a mixture of data, two examples would be: N255, 168050. It's the 168050 value that's causing the Task to bomb. How can I get this loaded into my table ?
I am running the package from within MS Visual Studio 2005 Version 8, Excel is version 2003 (11.8120.8122) SP2
Using the new referential integrity constraints that will be made available, will it allow us to manually define the relationships between entities even if there is no true foreign key constraints setup in the database?
Lets say we deleted the FK_Orders_Customers in Northwind between orders and customers.
Hi,I am supporting an application that was converted from ACCESS to SQLServer 2000. My question focuses on two particuliar tables. Theparent table has 14000 rows while child table has over 9 million rows.Referential integrity is set up between the two tables. The parenttable has a composite primary key of:CustomerId (int)LocationId (int)ProductId (int)The child table has a composite primary key of:CustomerId (int)LocationId (int)ProductId (int)InvTime (datetime)A constraint between the parent and child table consists of:CustomerIdLocationIdTankIdI have been asked to write an application that will allow users toupdate the Customerid and LocationId columns of the parent table. Myprogram works fine when you update just one parent record but if youtry and update 30 parent records I get a timeout error. I believe thebottleneck is the constraint between the parent and child tables.Outside of re-designing the tables (NOTE: I was not the originalDBA/Developer), does anyone have any suggestions I can do to improveperformance for my app?Thanks
Executed as user: companyadmin user. Violation of PRIMARY KEY constraint 'PK_tblRMAProduct'. Cannot insert duplicate key in object 'tblRMAProduct'. [SQLSTATE 23000] (Error 2627) The statement has been terminated. [SQLSTATE 01000] (Error 3621). The step failed.
Hi all, I am writing a portion of an app that is of intensely high online eCommerce usage. I have a question about identity columns and locking or not. What I am doing is, I have two tables (normalized), one is OrderDemographics(firstname,lastname,ccum,etc) the other is OrderItems. I have the primary key of OrderDemographics as a column called 'ID' (an Identity Integer that is incrementing). In the OrderItems table, the 'OrderID' column is a foreign key to the OrderDemographics Primary Key column 'ID'. What I have previously done is to insert the demographics into OrderDemographics, then do a 'select top 1 ID from OrderDemographics order by ID DESC' to get that last ID, since you can't tell what it is until you add another row.... The problem is, there's up to 20,000 users/sessions at once and there is a possiblity that in the fraction of a second it takes to select back that ID integer and use it for the initial OrderItems row, some other user might have clicked 'order' a fraction of a second after the first user and created another row in OrderDemographics, thus incrementing the ID column and throwing all the items that Customer #1 orders into Customer #2's order.... How do I lock a SQL table or lock the Application in .NET to handle this problem and keep it from occurring? Thanks, appreciate it.
I would like to create a table with primary key pair:
Key1 : nchar(10) Key2: nchar(10) Value: money
That is, Key1 and Key2 are the primary key columns for the table. I would like to think of (Key1='Foo', Key2='Bar') to be the "same" as (Key1='Bar', Key2='Foo'). Is there a way to enforce this as a table constraint, or do I have to enforce this manually in all procedures that modify and read the table?
I have a problem that has been frustrating me for a long time, simply because I know this has to be somewhere but I cant seem to find where to toggle this setting.
I have a large number of tables that I regularly send to a remote server using the DTS Export Wizard in SQL Server Management Studio 2005.
Although I have toggled "Enable Identity Insert", as well as "Drop and Recreate Destination Tables", my tables upon completion are missing their primary key constraints, as well as its Identity attribute.
I have to go in manually to each table and set the column that is the PK, and the Identity attributes - all my stored procs break as a result of the missing constraint.
What setting do I need to flag during the DTS Export that will preserve the key values for me on completion?
Ok, so I've broken down and decided to write myself an invoicing program. I'd like to use GUID fields as the Primary Keys in my table. Now, I basicly bill for two seperate items:
Deliverables and Services.
So, my Layout's gonna look something like
Create Table Invoice( ID UniqueIdentifier Primary Key, -- Other Data );
Create Deliverable( ID uniqueidentifier Primary Key, ParentInvoice uniqueidentifier, -- Other data); --...
Im sure there are probems with that as it's written feel free to edify me as to what they are.
my questions are such:
1) Does a uniqueidentifier field automagically get a value? 2) If not how do I generate one in TSQL? 3) If so, what do I use to store my Foreign Keys. 4) How do I declare my Foreign key constraints?
I have table variable in which I am inserting data from sql server database. I have made one of the columns called repaidID a primary key so that a clustered index will be created on the table variable. When I run the stored procedure used to insert the data. I have this error message; Violation of Primary key Constraint. Cannot insert duplicate primary key in object. The value that is causing this error is (128503).
I have queried the repaidid 128503 in the database to see if it is a duplicate but could not find any duplicate. The repaidID is a unique id normally use by my company and does not have duplicates.
I orginally had my project ID specified as an Int and the properties set as identity specification that would automatically fill in the ID field however I have now changed it as the ID needs to be specified by the user but now when i update a project the ID isnt seen as the identity so whatever i do affects other records not just the one i select. it is now defined as an nvarchar but i dont know how to set that as the identity so that each record can be edited seperately, can someone please help this is really urgent!! Im using visual web developer express with sql server, please please help!
I want to crete temporary table with this coammnd "CREATE TABLE Temp (ID int, name varchar(50))". I would like to know which command is used for setting primary key and identity on ID field. Thankyou in advance.
I have some code in my ASP.NET page which uses a SQL 2000 Database that was created before creating the ASP Page. The problem I'm having is using an insert statement such as the following example from the DATAGRID example on the Matrix Product. I want the option to create new rows but my Primary Key doesn't allow Nulls and when I hard code a number in the first field of my table for my ID...it's not automatically generated. I've looked through this forum but I'm having some problems understanding what others have done with Identity or GUID's...etc....:
Sub AddNew_Click(Sender As Object, E As EventArgs)
' add a new row to the end of the data, and set editing mode 'on'
CheckIsEditing("")
If Not isEditing = True Then
' set the flag so we know to do an insert at Update time AddingNew = True
' add new row to the end of the dataset after binding
' first get the data Dim myConnection As New SqlConnection(ConnectionString) Dim myCommand As New SqlDataAdapter(SelectCommand, myConnection)
Dim ds As New DataSet() myCommand.Fill(ds)
' add a new blank row to the end of the data Dim rowValues As Object() = {"", "", ""} ds.Tables(0).Rows.Add(rowValues)
' figure out the EditItemIndex, last record on last page Dim recordCount As Integer = ds.Tables(0).Rows.Count
Can anyone explain the Difference between Primary Key and Identity Column in MSSQL Server 6.5. Please give me any example if possible. Thanks for Help!!!!
I am working on a project to consolidate 3 distinct buildings name code(6 digit character called BUILDING_CODE Primary Key) into one building code. This is an effort to merge/move everyone who is currently coded under the three building codes into one building code. We currently have this column defined on 5 tables as primary key (none identity) in SQL Server 2005.
Out of the five tables one has two store procedure dependencies.
What would be the best practice to update the six digit BULDING_CODE column Primary Key value without causing any issues?
I want to use the Identity field (increment 1,1) as a primary key andhave a unique constraint on my other field which is of type char.I am worried that related data in other tables may lose referntialintegrity if records in the ID table get messed up and need to bere-entered.Can you please advice on best way to do this. I definitely need anumeric id field because it makes the joins and queries so muchfaster.
We are converting a legacy visual foxpro system to use a SQL back-end.A number of (existing DBF) tables currently have a zero-filled primarykey eg. '000255' which is just an auto-incrementing key - but alwaysstored as a char field with leading zeros.For backward compatibility we are considering retaining this primarykey and using an identity field to auto-generate the next value, thenconvert the new identity value into the new primary key. So ifidentity is 256 then the key field will be assigned '000256'.Now the problem with this is that the primary key must be non-null andunique so must be given a value in the INSERT statement. But, theidentity value isn't available (I presume) until after the INSERTstatement has executed.Is this a "don't go there" kind of problem?ThanksAndrew GrandisonSA Department of HealthAdelaide, South Australia
Hello -- Following normal practice, I have an autoincrementing identity column designated as primary key in my table. I have two other columns that should also contain unique values per record, but the Identity option is greyed out (in Management Studio) for all columns other than the primary key. I'm enforcing this programmatically (in my C# code) at this point, but I'd like to back that up with a constraint in the database itself. Any help is appreciated. Eric
I have the following issue - my database consists of tables with one ID field as primary key. for each INSERT the 'next' value from this ID field is extracted from a table called TableList. - this works perfectly fine, as long as I insert one record at a time: but now I would like to run a command such as INSERT INTO dest (name) SELECT name FROM src i.e. without being able to specify the ID value. Has anybody implemented this (i would prefer not to use identity columns or use cursors), possible with triggers?
Most of the tables in my database are implemented with IDENTITY columns as the primary key. When an INSERT from my application is attempted, sometimes I get an error returned stating that insert cannot be done because of duplicate key value. If I try the INSERT again, sometimes it works(??). Of course, DBCC CHECKIDENT resets the identity value if trying the INSERT again doesn't work. Then sometime a little later, the problem happens again. Is there anything I can do other than placing into my application code the execution of dbcc checkident anytime I want to do an insert to prevent the error? By the way, DBCC CHECKDB revealed no problems.
SELECT T.TABLE_NAME,C.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLES T JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME WHERE OBJECTPROPERTY(OBJECT_ID(T.TABLE_NAME), 'TableHasIdentity') = 0 AND T.TABLE_TYPE = 'BASE TABLE' AND OBJECTPROPERTY(OBJECT_ID(C.COLUMN_NAME),'IsPrimary Key') = 1 ORDER BY T.TABLE_NAME,C.COLUMN_NAME
This is giving me bogus results...
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE OBJECTPROPERTY(OBJECT_ID(COLUMN_NAME),'IsPrimaryKe y') = 1
I have PK's all over the place. What gives? Too many cocktails with lunch?
I have a table to store int primary keys. Where the value nextID is the value to use.I need to get the value and update it (nextID + 1) before the next person gets it.I thought using tran would work but it doesn't stop a select.How do I get a value (lock the table for the update), update the table (preventing any selects until done) and release the table.
BEGIN TRAN UPDATE TableIds SET NextId = NextId + 1 WHERE TableName = 'Users'
WAITFOR DELAY '00:00:20'
SELECT NextId FROM TableIds WHERE TableName = 'Users'
COMMIT TRAN
I really want to do this in the reverse order but it doesn't work. But if I do this and have another query to just do a select:
SELECT NextId FROM TableIds WHERE TableName = 'Users'
This query never returns. Doesn't the COMMIT TRAN release the lock on the table?
We are developing a batabase which is meant for financial domain,so it will import data from different source system.. and data from our data base will be further passed to other applications.
In contex of our system integration with other data sources ,whether is it a good idea to have a auto integer primary key a or to implement some logic to generate primary key?
Can some one guide us to some pratical data base design case studies?or some best practices.?
We are facing the following issue, several machines/users that are executing very often a command similar to :
INSERT INTO TableName (FieldOne,FieldTwo) VALUES ('ValueOne','ValueTwo'); SELECT SCOPE_IDENTITY() AS Table_ID;
Where TableName has a primary key defined as identity(1,1).and that Table_ID is being used as reference in others tables
These queries are executed using different dababase users and among several diffrent apps..The Problem is that we are detecting lost block of "Table_ID's" as the other tables shows the InsertedID as a reference, but the TableName table lacks of this ID record. In other words, the INSERT seems to work, the SCOPE_Identity returns an InsertedID, and the other tables are populated using this number. However, when we query the TableName table the mentioned record does not exist. We are profiling the server and we're sure that there are no DELETE statement on the TableName table. This seems to be happening when the are either deadlocks or blocked processes. Whenever the deadlocks and locks disappear/solved, everything works as expected.why the Scope_Identity returns the Inserted ID if the INSERT action had failed.
Can a Primary Key column also be a Identity column? The reason I am asking this question is because I have created a table and each time I insert data into the Address Table I am also inserting the AddressID, how do I get the Primary Key (AddressID column) to self generate ID values.