I'm trying to have a SProc that will initialize a database for me. This db is in development (I'm primarily writing SSIS packages, atm), and I constantly need to truncate the tables, then re-add a dummy/unknown row (PK/Identity value = 1). Of course, I need triggers not to fire (got that part working), and FK constraints to be bypassed temporarily -- that's the problem.
Here's where I'm at:
---------------------------------------------------------------------------------- CREATE PROCEDURE [dbo].[_InitializeDB] AS
DECLARE tables CURSOR FOR SELECT [name] FROM [sysobjects] WHERE [type]='U' AND [name]<>'sysdiagrams'
OPEN tables FETCH NEXT FROM tables INTO @name WHILE @@FETCH_STATUS=0 BEGIN SET @sql = 'ALTER TABLE ['+ @name + '] NOCHECK CONSTRAINT ALL' EXEC sp_executeSQL @sql SET @sql = 'DISABLE TRIGGER ALL ON [' + @name + ']' EXEC sp_executeSQL @sql SET @sql = 'TRUNCATE TABLE [' + @name + ']' EXEC sp_executesql @sql BEGIN TRY SET @sql = 'INSERT INTO [' + @name + '] (Active) VALUES (0)' EXEC sp_executeSQL @sql END TRY BEGIN CATCH PRINT @sql + ':' PRINT ERROR_MESSAGE() END CATCH SET @sql = 'ENABLE TRIGGER ALL ON [' + @name + ']' EXEC sp_executeSQL @sql SET @sql = 'ALTER TABLE ['+ @name + '] CHECK CONSTRAINT ALL' EXEC sp_executeSQL @sql FETCH NEXT FROM tables INTO @name END
CLOSE tables DEALLOCATE tables ----------------------------------------------------------------------------------
Running this Sproc produces (for the first ref'd table):
Msg 4712, Level 16, State 1, Line 1 Cannot truncate table 'Person' because it is being referenced by a FOREIGN KEY constraint.
hello . i have a grid for a table that gets updated with recordset.updatebatch for a multi-user application.
the problem is that some of the table fields have to be unique
now imagine the next situation.
user A opens the form user B opens the form user A writes '1000' in the unique field user A saves the recordset with updatebatch
user B writes '1000' in the unique field user B saves the recordset with updatebatch
now there will be two records with the field '1000' !
how can i avoid this ? i cannot check for unique during the update event of the grid because it should check during the time it is saving and not when it is just entering data without having updated the recordset
Hi, I am developing a database for my company in SQL server 2000 and I have some few problems. Firstly.
I have a customers table and orders table in my DB:
Customers Orders --------- ------ CustID (primary key) ----------------< CustID . ^ ProductID . | Quantity . | . . | . etc. | etc. | relationship (one to many)
What I want to do is: 1) to be able to delete a Customer and automaticaly SQL server delete all the orders that this customer done from the Orders table. 2) If for some reason the CustomerID changes, SQL should be able to automaticaly update the necessary fields with the new values in the Orders table. Finally, 3) I want to be able to insert a new customer that has an order and update both the Customers table and Orders table automaticaly. e.g
CustID Name Address ProductID Quantity etc. ------ ---- ------- --------- -------- ---- 10-003 John London 33-25 2 ...
Such a kind of insert should add automaticaly the following entries in the two tables:
Customers Orders --------- ------ CustID (10-003) CustID (10-003) Name (John) ProductID (33-25) Address(London) Quantity (2) . . . . etc. etc.
A friend of mine told me that this can be done using Foreign Check constraints in SQL server. But I do not know what to do.
I am Trying to add a check constraint that if the paymenttotal is 0 the column is allowed to have null and if its greater then 0 it is not allow to have null. Here is what I have so far but i get some syntax errors, See if you can see what im doing wrong and how to get this to be valid. Thanks heres what I got so far
Code:
ALTER TABLE Invoices WITH CHECK PaymentDate SMALLDATETIME NULL, CHECK (PaymentTotal = 0) PaymentDate SMALLDATETIME NOT NULL, CHECK (PaymentTotal > 0)
I also had this before i changed it to that and I got syntax erros as well but i dunno which is closer.
I would like to establish a constraint that extablishes one to one relation between ID1 and ID2. Meaning in the above example ID2 =122 should not be assingned to any ID1 other than 1. (For example, I should not be able to insert another row like ID1EffDateExpDateID2ID2_Location 41/1/200712/31/9999122ABC)
Beacause this table is maintained in a manual way, sometimes the ID2 which has already been assigned an ID1 is being assigned to another ID1.
What kind of constraint or rule will avoid this scenerio.
I have an Account table as well as a Bank table. The bank table has a total assets field. There is a foreign key in Account referencing Bank.
What I need is a check constraint that verifies that the total sum of the account balances for a particular bank is less than that banks total assets.
I've been thinking about this one for a while but it's just confusing me. How do I create the expression in the constraint for this? Currently I am using SQL Server Management Studio Express so I'm creating this constraint with the gui.
Hello, I want to write a unique constraint that applies to more than one column. What I mean is that the uniqueness should be that if column A is 5 and column B is 3 no other row where A and B has those values can exist.
Do I write this as a check constraint ? Or how do I do it ?
Also, is there anyone who knows some good reading on how to use Link Tables (many to many relations) in MS SQL Server ?
I have a question concerning setting up data integrity checks in SQL Server.
I have a table that lists "Groups" to which an Entity belongs. The Entity can belong to multiple Groups. Every entity has 1 and only 1 of its Groups designated as the "Primary Group". Based on this, my table contains multiple records for each Entity. Each record describes 1 Group of which the Entity is a member. In this record, there is a bit field indicating whether the Group is the "Primary Group".
In other DBMS's I have implemented a check constraint on the "Primary Group" column to enforce the business rule that "a Entity may have one and only one Primary Group". I am aware now, that in SQL Server 7, I must implement this rule as a trigger, or in the client or data services layers.
Does anyone know if SQL Server 2000 will allow me to write such a check constraint?
Hi, I´m facing teh following situation:This are just sample table names, but should do for discussingpurpouses.Create table Invoice(InvoiceID Integer Not Null,CustomerType Integer Not Null,CustomerCode Integer Not Null,Amount DECIMAL(10,2) Not Null,.................)Create Table Type1Customer(CustomerCode Integer Not Null,...............................)Create Table Type2Customer(CustomerCode Integer Not Null,...............................)I need to add a way to restrict the CustomerType and CustomerCode,in the Invoice table to the correct values.This means that if customerType equals 1 the customerCode should bechecked against Type1Customer and if customerType equals 2 thecustomerCode should be checked against Type2Customer.I succesfully created a check constraint. That ensures that the validvalues exists when the rows in the Invoice table are inserted orupdated, but doesn´t prevent from deleting records from tablesType1Customer and Type2Customer that are referenced from the Invoicetable.Are triggers the only way to go?Thanks in advanceSebastián streiger
I am working with an evaluation copy of SQL Server 2000 for the firsttime; my DB experience lies with MS Access.I have a simple table in SQL Server (tblCompany) that has a fieldcalled "Ticker." When new company stock tickers (i.e., MSFT forMicrosoft) are entered into the field, I'd like them in allcaps--whether the user types msft, Msft, MsFt, etc. In Access, thiswas easy--simply set the Format to ">" in table design view.In SQL Server Design Table view, I've clicked on "Manage Constraints"and put the following code in that I found elsewhere:([Ticker] = upper([Ticker]))I then checked all three boxes below: "Check existing data oncreation," "Enforce constraint for replication," and "Enforceconstraint for INSERTs and UPDATEs." The first one, "Check existingdata..." is checked as I've already entered in some data in the fieldin lowercase to see if the check constraint would go back and changeit to Upper Case--this because I'm wanting to ultimately migrate atable from Access to SQL Server and ensure that all Tickers are inUpper Case.I'm able to do this and then save the table design with changes; butevery time, I then go and look at the table data to see if the checkconstraint was applied, and each time it is not; then, I go back to"Manage Constraints" and find that the "Check existing data..." box isunchecked. I've gone through this SEVERAL times.Hoping this is something simple. Apologize for my "newbieness." I'vegot a "For Dummies" book in front of me as well as numerous Internetwindows open, trying to figure this out. Have checked books online onthe MSFT site as well to no avail.Thanks in advance--RAD
I have tables that are replicated using transactional and merge replication. As a result I am unable to use automatic identity management as transactional replication doesn€™t seem to understand it.
Therefore I have implemented a version of the automatic mechanisms that seems to work in a hybrid environment. It is based on a central table that holds the maximum identity for each table that has been issued to date. Valid identity ranges are issued to each publisher and subscriber as needed in a similar way to the automatic mechanisms and tables are reseeded as needed.
I want to enforce the ranges in a similar way to the automatic mechanism using a check constraint similar to this:
alter table [dbo].[test1] with NOCHECK add CONSTRAINT repl_identity_range_48DF13ED_D503_4F5C_AED9_4E504D03E752 check NOT FOR REPLICATION (([id] > 10001 and [id] <= 20001) or ([id] > 50001 and [id] <= 70001))
This works OK on a client subscriber, but if the change is made on the publisher, then the alter statement itself is replicated out to all clients €“ which is not what is wanted. I have traced the automatic mechanisms using profiler and they issue an alter statement as above €“ following dropping of the constraint €“ but the check constraint isn€™t replicated. I can't see how this is achieved.
How do I stop the check constraint being replicated?
The article property schema option can be set to stop replicating check constraints, but this seems to have no effect. If the publication property replicate_ddl is set to 0 then I do see the behaviour that I want. However, I do need to be able to replicate most schema changes due to upgrades etc €“ so this doesn€™t look like a viable option €“ except possibly for the transactional publication.
When our DB was converted from 6.5 to 7, the some column check constraints changed to table constraints.
Is there a way to change them back, short of rebuilding the table? I can't find a syntax to add a column constraint without adding a column. Some of the affected tables contain millions of rows, so I'd rather not rebuild them.
When I create a test table with a column and a table check, I see that in sysconstraints "colid" and "status" are different, and in sysobjects "info" and "status" are different. I am leary of tweaking the database catalog though. Heck, this is SQL 7; I don't even know if these are real tables or mirages.
create table zzzfoo ( myname char(30) check (myname in ('foo', 'bar')), myfuzz char(30), check (myfuzz in ('cotton', 'wool', 'linen')) )
select sc.* from sysconstraints sc, sysobjects so where sc.id = (select id from sysobjects where name = 'zzzfoo') and sc.constid = so.id and so.type = 'C'
Let's say I create a multi-statement function like this:CREATE FUNCTION dbo.Test ()RETURNS @res TABLE (N int NOT NULL CHECK (N >= 0))ASBEGININSERT INTO @resSELECT 1RETURNENDThat works fine. Then I make a change in the function's body, replace theCREATE FUNCTION with ALTER FUNCTION, and execute the batch. I get an error:Server: Msg 3729, Level 16, State 3, Procedure Test, Line 9Cannot ALTER 'dbo.Test' because it is being referenced by object'CK__Test__N__5D2E32EB'.Indeed, if I look at the list of dependencies for the function in QA'sobject tree, I can see the check constraint referenced in the errormessage.ALTER FUNCTION works fine if I don't specify the CHECK constraint in thedefinition of the @res table.So it seems that the only way to modify such a function is to drop andrecreate. Is that a known behavior? Is there any particular reason for it?Thanks.--(remove a 9 to reply by email)
I have one table like below Test table. My requirement is to create constraints to confirm <g class="gr_ gr_331 gr-alert gr_gramm Grammar only-ins replaceWithoutSep" data-gr-id="331" id="331">uniqueness</g> of STID value 101 with LN.
likeÂ
ID - LN - STID 1 - 'ABC' - 101 Â ---- Valid Row 2 - 'ABC' - 202 --- Valid Row 3 - 'ABC' - 202 --Valid Row (as I want only unique when LN = 'ABC' with STID = 101) 4 - 'ABC' - 101 -- Invalid Row (As I want uniqueness base on LN and STID = 1011)
create table dbo.Test ( ID int identity, LN varchar(50), STID bigint )
Is this possible with constraints as I don't want to use <g class="gr_ gr_1041 gr-alert gr_gramm Grammar only-ins doubleReplace replaceWithoutSep" data-gr-id="1041" id="1041">trigger</g>.
I'm considering adding domain integrity checks to some of my database tableitems. How does adding such constraints affect SQL Server performance? Forexample, I have a simple constraint that restricts a couple of columns tohaving values within the values assigned in my application by anenumeration:(([Condition] >= 0 and [Condition] <=3) and ([Type] >= 0 and [Type] <=2))This enforces domain integrity for two enumerations having values 0, 1, 2, 3and 0, 1, 2 in the application. Is this an efficient way of performing suchchecks? What are the pitfalls of domain integrity checking?ThanksRobin
I have come across this problem with SQL server both on 2000 and 2005. I am stating an example here.
I have two partitioned tables and a view on top of both tables as below: create table [dbo].[Table_1] ( [TableID] INTEGER PRIMARY KEY NONCLUSTERED CHECK NOT FOR REPLICATION ([TableID] BETWEEN 1 AND 999), [AnyOtherColumn] int NOT NULL , ) ON [Primary] GO
create table [dbo].[Table_2] ( [TableID] INTEGER PRIMARY KEY NONCLUSTERED CHECK NOT FOR REPLICATION ([TableID] BETWEEN 1000 AND 1999), [AnyOtherColumn] int NOT NULL , ) ON [Primary] GO create view TableView as select * from Table_1 union all select * from Table_2 GO
Note the NOT FOR REPLICATION clause on the check constraint on the TableID column.
I then ran the query execution plan for the following query on both SQL server 2000 and 2005. select * from TableView where TableID = 10
On both the versions the execution plan shows and Index seek on both the tables in the view. This means that my partitioning is not working. If I remove the primary key constraint from the TableID column, the same query on the view shows a table scan on all the underlying tables. This is even worse.
Next, create the same tables and views again, now without the NOT FOR REPLICATION clause on the check constraint as show below: create table [dbo].[Table_1] ( [TableID] INTEGER PRIMARY KEY NONCLUSTERED CHECK ([TableID] BETWEEN 1 AND 999), [AnyOtherColumn] int NOT NULL , ) ON [Primary] GO
create table [dbo].[Table_2] ( [TableID] INTEGER PRIMARY KEY NONCLUSTERED CHECK ([TableID] BETWEEN 1000 AND 1999), [AnyOtherColumn] int NOT NULL , ) ON [Primary] GO
create view TableView as select * from Table_1 union all select * from Table_2 GO
Now run the query execution plan for the same query again.
select * from TableView where TableID = 10
This time you would see that it does an index scan only on the first parititon table. This time it proves that the partitioning works.
I would like to know why does the NOT FOR REPLICATION clause in the check constraint make such a huge difference?
My batches need to have some sequential ids added to them. These ids need to be system-wide.
Here is example input data. I am given the first two cols and need to generate the third:
Code Snippet Row RowType ID A LN LN1001 B LN LN1002 C TR TR2001 D LN LN1003 E TR TR2002 F TR TR2003
There is no relation between Row and ID except for the sequence of the records.
I have a table that looks like this:
Code Snippet RowType MaxID LN 1003 TR 2003
and that is where I go to get/update my latest id. (SELECT ? = MaxID = MaxID + 1 Where RowType = 'TR')
My question is this: I will probably use a script step to do the work of obtaining and applying a new row id to each row. How do I run the requisite SQL from within a script step? Or is there a better way of doing it?
Is there any way or option to get the all columns of dataset added to table when we add a table in data region. It will take lot of time to add one by one and also there are chances to add one column ore than once.
I'm putting a process together to run a DBCC CHECKCONSTRAINTS process against copies of client databases.The author application doesn't set the constraints as trusted, and therefore we need to check the integrity of the data.
The problem is that some of the Check constraints have a definition that is longer than 4,000 characters.When this is the case, DBCC CHECK CONSTRAINTS fails.One option is that I write a cursor to select the constraints that have a definition less than 4,000 characters and then call the DBCC command for those particular constraints. However, I'd prefer a more elegant approach - ideally a way to run DBCC CHECKCONSTRAINTS against all constraints regardless of the length of the definition
I have Variable , data source and conditional transformation which checks the count(*) if the count == 0 then I connect an script component and change variable to false(initial it is True) and write into a log file...
Then I check that variable on predence constarint at workflow if variable==True then success. BUT Whenever I run the package my dataflow gets green even the condition does not meet like count==0 . So my variable's value is "False". Actually if the condition doesnt meet then my script shouldnt work. Am I missing something???
Hi, I want to drop a column from a table with default constraint. It is giving me error.. ------------------ Server: Msg 5074, Level 16, State 1, Line 1 The object 'DF__ACTIVITY___ROLLU__108B795B' is dependent on column 'ROLLUP_BGT_COST_FIXED'. Server: Msg 4922, Level 16, State 1, Line 1 ALTER TABLE DROP COLUMN ROLLUP_BGT_COST_FIXED failed because one or more objects access this column. -------------------------
Here is the drop statement ----------- DROP STATISTICS ACTIVITY_BASELINE.ROLLUP_BGT_COST_FIXED ALTER TABLE ACTIVITY_BASELINE DROP COLUMN ROLLUP_BGT_COST_FIXED; ------------------------
How to check to make sure a column does not exist before adding it? Be nice to do this in t-sql code instead of using ado.net. It seems as if the IF NOT EXISTS is not supported in SqlCe 3.1? I am trying to do this but I get the token error:
IF NOT EXISTS ( select * from Information_SCHEMA.columns where Table_name='authors' and column_name='NewColumn' ) select 'no'
Is there a list of all CE supported t-sql commands?
Adding more columns in a matrix report that don€™t belong to the columns drilldown dimensions€¦
That is, for example, having the following report:
Product Family
Product
Country City Number of units sold
Then I would add some ratios, that is, Units Sold/Months (sold per month) and other that is the average for Product Family (Units Sold/Number of Product Family), for putting an example€¦ some columns should be precalculated prior to the report so do not get into it, the real problem I don€™t see how to solve is adding one or two columns for showing these calculated column that doesn€™t depend on the column groups but they do for the rows groups€¦
Any guidance on that?
The only way I am seeing by now is to set it as two different reports, and that is not what my client wants€¦