Sql Server Data Comparison
Posted : admin On 5/13/2019but in the database the user was created on 2014-02-07 12:30:47.220
and when I only put '2014-02-07'
It does not show any data
6 Answers
Oct 10, 2012 - In my life prior to SQL Server, I worked with Visual Studio Team System (VSTS). The “Schema and Data Comparison” feature of SQL Server.
DON'T be tempted to do things like this:
This is a better way:
see: Sargable (the page was removed from Wikipedia)
EDIT +There are 2 fundamental reasons for avoiding use of functions on data in the where clause (or in join conditions).
- In most cases using a function on data to filter or join removes the ability of the optimizer to access an index on that field, hence making the query slower (or more 'costly')
- The other is, for every row of data involved there is at least one calculation being performed. That could be adding hundreds, thousands or many millions of calculations to the query so that we can compare to a single criteria like
2014-02-07
. It is far more efficient to alter the criteria to suit the data instead.
'Amending the criteria to suit the data' is my way of describing 'use SARGABLE
predicates'
And do not use between either.
the best practice with date and time ranges is to avoid BETWEEN and to always use the form:
WHERE col >= '20120101' AND col < '20120201' This form works with all types and all precisions, regardless of whether the time part is applicable.
http://sqlmag.com/t-sql/t-sql-best-practices-part-2 (Itzik Ben-Gan)
If you are on SQL Server 2008 or later you can use the date datatype:
It should be noted that if date column is indexed then this will still utilise the index and is SARGable. This is a special case for dates and datetimes.
You can see that SQL Server actually turns this into a > and < clause:
I've just tried this on a large table, with a secondary index on the date column as per @kobik's comments and the index is still used, this is not the case for the examples that use BETWEEN or >= and <:
According to your query Select * from [User] U where U.DateCreated = '2014-02-07'
SQL Server is comparing exact date and time i.e (comparing 2014-02-07 12:30:47.220
with 2014-02-07 00:00:00.000
for equality). that's why result of comparison is false
Therefore, While comparing dates you need to consider time also. You can useSelect * from [User] U where U.DateCreated BETWEEN '2014-02-07' AND '2014-02-08'
.
Of-course this is an old thread but to make it complete.
From SQL 2008 you can use DATE datatype so you can simply do:
You can use LIKE
statement instead of =
. But to do this with DateStamp you need to CONVERT
it first to VARCHAR:
Please try this. This query can be used for date comparison
Not the answer you're looking for? Browse other questions tagged sqlsql-servertsqldatetime or ask your own question.
-->You can compare the data that is contained in two databases. The databases that you compare are known as the source and the target.
Note
Database projects and .dacpac or .bacpac packages cannot be the source or target in a data comparison.
As the data is compared, a Data Manipulation Language (DML) script is generated, which you can use to synchronize the differing databases by updating some or all of the data on the target database. When the data comparison finishes, its results appear in the Data Compare window of Visual Studio.
After the comparison finishes, you can take other steps:
You can view the differences between the two databases. For more information, see Viewing Data Differences.
You can update all or part of the target to match the source. For more information, see Synchronizing Database Data.
For more information, see Compare and Synchronize Data in One or More Tables with Data in a Reference Database.
Note
You can also compare the schema of two databases or of two versions of the same database. For more information, see How to: Use Schema Compare to Compare Different Database Definitions.
Comparing Database Data
To compare data by using the New Data Comparison Wizard
On the SQL menu, point to Data Compare, and then click New Data Comparison.
The New Data Comparison wizard appears. Also, the Data Compare window opens, and Visual Studio automatically assigns it a name such as DataCompare1.
Identify the source and target databases.
If the Source Database list or the Target Database list is empty, click New Connection. In the Connection Properties dialog box, identify the server on which the database resides and the type of authentication to use when connecting to the database. Then, click OK to close the Connection Properties dialog box and return to the Data Compare wizard.
On the first page of the Data Compare wizard, verify that the information for each database is correct, specify which records you want to include in the results, and then click Next. The second page of the Data Compare wizard appears and shows a hierarchical listing of the tables and views in the database.
Select the check boxes for the tables and views that you want to compare. Optionally, expand the nodes for database objects, and then select the check boxes for columns within those objects that you want to compare.
Note
Tables and views must meet two criteria to appear in the listing. First, the schemas of the objects must match between the source and target databases. Second, only tables and views that have a primary key, a unique key, a unique index, or a unique constraint appear in the list. If no tables or views meet both criteria, the list will be empty.
If more than one key is present, you can use the Comparison Key column to specify the key on which to base the data comparison. For example, you can specify whether to base the comparison on the primary key column or on another (uniquely identifiable) key column.
Click Finish.
The comparison starts.
Note
You can stop a data comparison operation that is in progress by opening the SQL menu, clicking Data Compare, and then clicking Stop Data Comparison.
When the comparison is finished, you can view the data differences between the two databases. You can also update part or all the data in the target database to match the data in the source database.
To compare data by using the Visual Studio automation model
Open the View menu, point to Other Windows, and click Command Window.
In the Command Window, type the following command:
Replace the placeholders (sServerName, sDatabaseName, sUserName, sPassword, sDisplayName, tServerName, tDatabaseName, tUserName, tPassword, and tDisplayName) with the values for your source and target databases.
If you do not specify a source and a target, the New Data Comparison dialog box appears. For more information about the parameters for the Sql.NewDataComparison command, see Automation Command Reference for Database Features of Visual Studio Team System.
The data in the specified source and target databases are compared. The results appear in a Data Compare session. For more information about how to view results or synchronize the data, see Viewing Data Differences and Synchronizing Database Data.
Viewing Data Differences
After you compare the data in two databases, Data Compare lists each database object that you compared and its status. You can also view results for the records within each object, grouped by status. For more information about the status designations, see Compare and Synchronize Data in One or More Tables with Data in a Reference Database.
After you view the differences, you can update the target to match the source for some or all of the objects or records that are different, missing, or new. For more information, see Synchronizing Database Data.
To view data differences
Compare the data in a source and a target database. For more information, see Compare Database Data.
(Optional) Do one or both of the following:
By default, the results for all objects appear, regardless of their status. To display only those objects that have a particular status, click an option in the Filter list.
To view results for records within a particular object, click the object in the main results pane, and then click a tab in the records view pane. Each tab displays all records within that object that have a particular status: different, only in source, only in target, and identical. Data appears by record and column.
Synchronizing Database Data
After you compare the data in two databases, you can synchronize them by updating all or part of the target to match the source. You can compare the data in two kinds of database objects: tables and views.
To update target data by using the Write Updates command
Compare the data in a source and a target database. For more information, see Compare Database Data.
After the comparison finishes, the Data Compare window lists results for the objects that were compared. Four columns (named Different Records, Only in Source, Only in Target, and Identical Records) display information about objects that were not identical. For each such object, these columns display how many records were found to be different, and how many records an update operation would change. Those two numbers match at first, but in step 4 you can change which objects to update.
For more information, see Compare and Synchronize Data in One or More Tables with Data in a Reference Database.
In the table of the Data Compare window, click a row.
The details pane shows results for the records in the database object that you clicked. Records are grouped by status onto tabs, which you can use to specify the data that will be propagated from the source to the target.
In the details pane, click a tab whose name contains a number other than zero (0).
The Update column of the Only in Target table contains check boxes that you can use to select rows to be updated. By default, each check box is selected.
Clear check boxes for records in the target that you do not want to update with data from the source.
When you clear a check box, you reduce the number of records to update, and the display changes to reflect your actions. This number appears in the status line of the details pane and in the corresponding column in the main results pane, as described in step 1.
(Optional) Click Generate Script.
A Transact-SQL editor window opens and shows the Data Manipulation Language (DML) script that would be used to update the target.
To synchronize records that are different, missing, or new, click Update Target.
Note
While the target database is being updated, you can cancel the operation by clicking Stop Writing to Target.
The data of the selected records in the target is updated with the data from the corresponding records in the source.
Note
If you opt to update indexed views, the Update Target operation might fail if this action causes duplicate keys to be inserted into the same table.
To update target data by using a Transact-SQL script
Compare the data in a source and a target database. For more information, see Compare Database Data.
After the comparison finishes, the Data Compare window lists the objects that were compared. For more information, see Compare and Synchronize Data in One or More Tables with Data in a Reference Database.
(Optional) In the details pane, clear the check boxes for records in the target that you do not want to update, as described in the previous procedure.
Click Generate Script.
A new window shows the Transact-SQL script that would propagate the changes necessary to make the data in the target match the data in the source. The new window is given a name such as DataUpdate_Database_1.sql.
This script reflects changes that you have made in the details pane. For example, you might have cleared a check box for a given row in the Only in Target page for the [dbo].[Shippers] table. In that case, the script would not update that row.
(Optional) Edit this script in the DataUpdate_Database_1.sql window.
(Optional but recommended) Back up the target database.
Click Execute to update the target database.
Specify a connection to the target database that you want to update.
Important
By default, the updates occur within the scope of a transaction. If errors occur, you can roll back the whole update. You can change this behavior.
The data of the selected records in the target is updated with the data from the corresponding records in the source.