Contents 

AdeptSQL Diff Reference
Getting started
Connecting to databases
Scanning available servers
Saving and opening comparisons
Running from command line
Working with the schema
Viewing schema differences
Comparing objects side-by-side
Dragging and dropping schema items
Using schema filters
Configuring schema options
Comparing table data
DataDiff overview
Data comparison options
Column configuration file
Special situations comparing data
Executing the SQL
SQL errors and warnings
Keyboard shortcuts
Editing commands and keyboard shortcuts
Using keyboard templates
Choosing debugger's key mapping
Using COM Automation interface
Automating schema comparison
Automating data comparison
Licensing and contact info
Registration of AdeptSQL Diff
Contact information
Version history (last updated for ver. 1.90 [Build 58])

AdeptSQL Diff Online Help

Prev Page Next Page
17-Feb-2006 AdeptSQL Diff v. 1.90 Beta 45

Another bunch of corrections, including important improvements in SQL scripting and in DataDiff.

Quick links:

Changes

  • To avoid timeout errors when a complex database is scanned, it may be necessary to increase the timeout value for queries (not to be confused with the connection timeout). Such setting did exist in the Diff, but it was hidden on an unrelated option page ('Executing scripts/General'). This is obviously a connection-specific setting, so it is now added to the connection panel and removed from the options dialog.
  • When a saved comparison is loaded, the Diff now recognizes when the two DBs are happen to be on the same server and automatically sets "(o) On the same server" mode.
  • DataDiff column configuration: the pull-down part of the filter combobox, containing the recently used expressions, is now saved not in the registry (common for all DataDiff comparisons), but with the settings for this particular table comparison.
  • Fixed-size string columns (e.g. 'NCHAR(30)') were loaded with all their trailing spaces, which prevented them from comparing correctly. That is, DataDiff would see any string value in a CHAR(5) column as different from the identical string value in a CHAR(8) column. Now the DataDiff can optionally RTRIM() string columns before fetching them from the server. This option is automatically turned on for CHAR and NCHAR columns, but not for VARCHAR/NVARCHAR (because trailing spaces in VARCHARs are probably needed). However, you can override this setting for any string column in the column configuration dialog.
  • One recent addition to DataDiff column configuration, the 'Insert mode' option, was specified as one setting for both compared columns. However, it turned out to be more consistent to use separate setting for each direction (that is, depending on whether you update left-hand or right-hand table, the column value may need to be scripted differently). The column configuration dialog has been changed accordingly.

Bug fixes

  • Constraint generation is broken in Beta44: When constraints are restored, the Diff now misses the whole 'alter table... add' part! Fixed.
  • The SQL editor window used to keep the CPU 100% busy just doing some idle-loop checks repeatedly. Not so much a bug as an annoyance, but now it is fixed, anyway. Now the windows in Diff are very quiet CPU-wise, unless you are actually doing something with them.
  • When DataDiff scripted a DECIMAL column, it used system locale settings. If the locale used comma as a decimal separator, the scripted numbers would also have commas inside, which is not valid in SQL. This version always produces valid decimal literals.
  • Decimals with different number of decimal places didn't compare correctly (e.g. the DataDiff would see 1.0000 and 1.00 as different values). This happened because DataDiff tends to use fast binary comparison whereever possible, especially for numeric columns. However, for equivalent DECIMALs the binary representation depends on the number of decimal places, so binary comparison can not always be used. Fixed.
  • Hopefully nobody uses that, but SQL Server does allow to include square brackets or quote chanracters into "quoted" object names, like "t[1]". For this to work, the closing brackets must be escaped by doubling them, e.g. 'CREATE TABLE [t[1]]] (...)'. The Diff didn't do the escaping correctly, which would cause scan errors if such objects existed in the databases. Fixed.
  • When a session starts with connection having Windows authentication, the login/password fields were not disabled until you switch to SQL login and back to Windows authentication. Fixed.
  • After the fix in Beta40 which disables permission scripting for users missing in the target DB, the Diff also stopped scripting permissions in some other situations when they should have been scripted. Fixed.
  • The "Hide identical rows" filter in DataDiff didn't work when some of the columns had different data type (e.g. 'int' against 'float'), even if their values in a particular row are equivalent or not. Fixed.
  • 'Timestamp' columns in DataDiff must have 'Exclude from inserts' setting as the only one possible for them. Done.
  • DataDiff display filters ('Hide unchanged', etc) must not affect the view when a single table is being viewed in DataDiff. As it was, the filters remaining after the last comparison could hide the viewed table completely, whereas the 'set filters' button on the toolbar is disabled. Fixed.
  • When viewing a single table in DataDiff, the column configuration dialog incorrectly forced all columns to be 'ignored for inserts', so no INSERTS were scripted. Fixed.
  • Due to an error reading comparison files, DataDiff configurations for specific tables were not re-loaded with the comparison. Fixed.
  • Several corrections have been made in the code allowing to specify separate row filter expressions in DataDiff.
  • In some situations DataDiff's column configuration dialog assigned to columns default scripting modes which aren't even enabled for them. The logic of assigning default descripting modes and other column-wise DataDiff option has been reviewed and corrected in many places.

Known issues

  • When a column with some constrains is recreated, and constraints of this type are configured to be scripted with column (e.g. 'x int unique'), the Diff drops the PK, drops the column, recreates the column with constraint, then tries to add the same constraint again, which is an error.
  • The 'Discard unchanged rows' option is DataDiff doesn't work if the rows contain any column(s) with data conversion (e.g. 'int' vs. 'float').

16-Feb-2006 AdeptSQL Diff v. 1.90 Beta 44

This update fixes a DataDiff bug introduced in Beta42 and a potential "access violation" when reading schema dependencies from the database.

Quick links: DataDiff broken, AV reading dependencies, enabled/disabled constraints

Bug fixes

  • DataDiff broken: Recent changes in Beta42 changed format of the connection string being passed to DataDiff when a data comparison starts. As the result, DataDiff was unable to connect to the databases. Fixed.
  • AV reading dependencies: Sometimes during the 'Reading dependencies' phase of the scan the Diff would show 'Access violation' warning in the message panel and skip the rest of the schema loading (database properties, extended properties, permissions). Fixed.
  • Some DEFAULT constaints belonging to system tables ended up in the schema tree as global defaults (that is, those created by 'CREATE DEFAULT...'), which is an error. Fixed.
  • There are several corrections scripting enabled/disabled constraints: (a) When the Diff generated a script to add a disabled ('WITH NOCHECK') constraint to the table, it missed the 'WITH NOCHECK' clause. (b) Besides, simply adding a constraint WITH NOCHECK is not sufficient for it to be disabled, ALTER TABLE NOCHECK is required as well. (c) When synchronizing enabled vs. disabled constraints with automatic names, the Diff inserted the wrong name (that is, in the script for right-hand DB it used constraint name from left-hand DB). All these errors have been fixed.

15-Feb-2006 AdeptSQL Diff v. 1.90 Beta 42

Multithreaded schema loading, improved connection panel, various small corrections, especially in setting and storing of several schema options.

Quick links: server selection combobox, server aliases, server scan dialog, parallel schema loading, new progress dialog, internal changes, "Difference hints/Long items hints"

New and changed features

  • Server names in the server selection combobox look just like before, but 'behind the scenes' the Diff now keeps a partial connection string for each of them, not just the server name. So once you select a server from the combobox, this can also automatically set netlib, IP, login or timeout, depending on which information is available for this particular pull-down item (from the server scan dialog, or from server aliases in the registry, etc).
  • To fill the servers combobox, the Diff now uses the list of 'server aliases', as specified by the MS Client Network Utility, in addition to other sources it used before.
  • The server scan dialog has been modified to allow you to choose connections with a specific network library. You can now double-click not only on a 'server' node in the scanned tree, but on its netlib-specific subnodes as well. Supported are 'TCP/IP' and 'named pipe' subnodes.
  • The two database schemas are now loaded by two parallel threads, which can result in significantly shorter loading times. The actual effect of this parallel schema loading will depend on where your servers are: loading from two different remote servers may be almost twice as fast now, whereas for the local server the gain won't be that significant.
  • Accordingly, the Diff now uses a new progress dialog during the schema scan. The dialog has two separate progress indicators for each of the databases being compared.
  • There have been serious internal changes in the Diff to allow the multithreading described above. One other side effect of these changes is that the Diff now handles aborted or failed comparison in a more reliable way: if the new comparison fails, the current comparison remains intact. The Diff will no longer show the one-sided schema view if one of the connections fails.
  • When you change any options in the "Schema Options" dialog, and these changes affect how the schema tree should look, the Diff immediately repaints or rebuild the schema tree, as necessary. If complete schema rescan is required, the Diff first asks if you want to reload the schema now. In previous versions, changes in the settings would not be reflected in the schema view until you manually refresh it.
  • The option controlling case-sensitivity of name comparison has been moved from "Schema Scan/Ignored Details" to "Comparison/Textual and name comparison".

Bug fixes

  • When you run SQL script in the editor window, and there is a transaction, and the server encounter a SQL error inside the script, the editor would fail to reset its internal "in transaction" flag. When this happens, the editor window can never be closed, because it asks to end the transaction which no longer exists on the server. This has been fixed: the editor now correctly resets its internal flags when a transaction is rolled back by an error.
  • The "Difference hints/Long items hints" option on the "Display/Schema Tree" option page didn't work. It is fixed now.
  • On the options page "Schema Scan/Ownership", the "Retrieve all/Owned by" and the "Ignore owner names" options were not correctly loaded on startup, so every time you run the Diff, they would be reset to the defaults. Fixed.

05-Feb-2006 AdeptSQL Diff v. 1.90 Beta 41

This update fixes several problems reported by the users. More changes are on the way, but putting them into the same update would have delayed it unnecessary, so only the bug fixes have been included here.

Quick links:

Bug fixes

  • The SQL generator would sometimes forget to put the table name in ALTER TABLE ... ADD CONSTRAINT [foreign key]... Fixed.
  • When a NOT NULL column is added to a table which already has data, the Diff scripts this by first adding the column as a nullable one, then updating it to some default value (like 0), then ALTERing to NOT NULL. However, it tried to use the same sequence for a TIMESTAMP column, which is initialized internally and should be simply added. Fixed.
  • Schema reporting command caused access violation if called when you have only one database loaded (not a comparison). Fixed.
  • When a report is about to be generated for a single database, the "[x] Report only changed items" checkbox doesn't make any sense. So in this version, it is disabled when reporting a single DB.

Minor changes

  • Now the SQL editor blocks the switching of target DBs while in transaction.

Known issues

  • There is an AV lurking somewhere in the DataDiff report dialog. I saw it once but so far has been unable to reproduce.
  • Both schems and data reporting for a single database actually need separate report templates. Using comparison statistics and color highlighting in this case doesn't seem to make such sense.

29-Jan-2006 AdeptSQL Diff v. 1.90 Beta 40

Finalized SQL2005 compatibility for procedures, functions and triggers. Important improvements in code generation, various bug fixes.

Quick links: "WITH EXEC[UTE] AS ...", "Script users" option, trigger comparison, re-creates permissions, Permissions for missing users, NFR for triggers, mousewheel scrolling, Detecting BEGIN TRANS, Error in column order, Some options not saved

New and changed features

  • The Diff now correctly processes "WITH EXEC[UTE] AS ..." option for SQL2005 procedures, triggers and functions, as well as "RETURNS NULL ON NULL INPUT" / "CALLED ON NULL INPUT" option for functions. Since the new "EXTERNAL NAME ..." clause in procedures and functions is compared as part of the body text, it does not require any special handling in the Diff. This means the Diff now fully supports procedures, functions and triggers in SQL2005.
  • If you try to close an SQL Edit window while there is an open transaction, the Diff will show you a warning message box and won't close the window unless you either commit or rollback the transaction.
  • A new "Script users" option is added on the "Scripting/Schema level" option page. This way you can tell the Diff not to script users (groups, roles) when synchronizing the entire databases (from the root of the schema tree). It appears that more often than not you will have different sets of users in the source and the target databases, so this option is initially turned off (that is, not to script users). Regardless of the setting, you can still script users if you select some of them (or the entire category) in the schema tree.

Bug fixes

  • The trigger comparison logic has been disrupted in Beta 39, so the Diff detects changes in triggers but can't synchronize them. This is fixed now.
  • After an object is synchronized by re-creating it, none of its permissions were re-created. This applied to procedures, functions, triggers and views. Now the Diff re-creates permissions, after re-creating the object itself, as they were in the target database. If you really need to synchronize the permissions, you will have to apply the re-creation script, refresh the schema and synchronize again. This is obviously not a perfect solution, but at least you won't have permissions on the target server suddenly dropped.
  • Permissions for missing users: When scripting differences in permissions and some of the users (to whom those permissions are granted) are defined only in one database, the Diff did not take this into account and generated GRANT/DENY/REVOKE statements for those missing users as well. This version corrects this: permissions are synchronized only for users which exist in both databases.
  • NFR for triggers: Trigger comparison now takes into account the 'Ignore Not For Replication' option. Since 'NOT FOR REPLICATION' is specified as a part of trigger body, it took some changes in Diff's built-in SQL parser to make it ignore the NFR clause during the text comparison. NOTE: if you wish the NFR ignored for triggers, you must also enable "Lexical comparison" on the "Comparison/SQL Textual..." option page. The Diff now prompts you to do so.
  • The SQL editor did not recognize mousewheel scrolling. The mousewheel works now.
  • Detecting BEGIN TRANS: The SQL editor is supposed to detect when a transaction begins or ends from the SQL script (e.g. after executing BEGIN TRANS, as opposite to just clicking the "Begin trans" button), but that didn't work in previous versions. Fixed.
  • Error in column order: In some rare situations, after repeatedly adding and removing columns from a table (e.g. using MS Enterprise Manager), the Diff would read the columns in a wrong order. Fixed.
  • Some options not saved: The flags controlling textual comparison for procedures/triggers/views/functions, such as case-sensitivity or lexical comparison, were not properly saved on exit and therefore would revert to default settings on the next run. Fixed.

Known issues

  • When you choose a different server in the connection panel and there is a database name already selected (for the previous server), the Diff does not attempt to verify that the database name is valid for the new server as well. Though not a bug, this creates an opportunity to make mistakes configuring your server connections, so something is going to be done about this.
  • When you run a comparison with the left-hand DB incorrectly specified, the Diff reports an error connecting to the left-side DB, but then proceeds reading the right-hand one. When it is done, the tree view remains empty. The correct behaviour would be to stop the comparison if either of the databases is not available and revert to the "no comparison" display.
  • When you are synchronizing a user type definition, and this user-defined type is used by some columns in the target database, the columns are not converted to the new type definition, but instead reverted to their original physical type. This is not exactly a bug, but the result may be different from what you'd expect. Probably an option should be added to detemine how you'd like to script such situations. Example: suppose you have a type 'MyNumber' in both databases, defined as 'DECIMAL(10,2)' in the left-hand DB and as 'DECIMAL(14,5)' in the right-hand one. After synchronizing this type left-to-right, any columns of type 'MyNumber' will become of type 'DECIMAL(14,5)' (that is, their actual type remains unchanged, but that is no longer a UDT), whereas the desired result is probably that they remain 'MyNumber', but with the physical type changed according to the new definition 'DECIMAL(10,2)'.

18-Jan-2006 AdeptSQL Diff v. 1.90 Beta 39

This update contains some important corrections in the way the Diff reads table functions, triggers and elsewhere in the scripting engine.

Quick links: Computed columns in tbale function, SET ANSI_NULLS and SET QUOTED_IDENTs, Triggers didn't compare correctly, enabled and disabled triggers, [x] Ignore Enabled/Disabled, Incorrect table re-creation, always re-creates table functions

Bug fixes

  • Computed columns in tbale function: When you use a table function, and the returned table of this function contains computed columns, SQL Server keeps the column expressions in a way that confuses Diff's schema reader (it says "CREATE statement expected" and occasionaly has an AV). This bug existed in all versions of Diff and is now fixed in 1.90 Beta 39.
  • SET ANSI_NULLS and SET QUOTED_IDENTs setting for table functions were not correctly loaded (they were always OFF in the Diff). This error was a result of SQL2005-compatibility changes in 1.90. Previous versions used an undocumented 'status' field in sysobjects to fetch the settings. This worked fine in SQL2000, but didn't work at all in SQL2005. Earlier builds of 1.90 switched to the 'official' way of getting these settings via OBJECTPROPERTY, which worked fine with SQL2005, but it turned out that in SQL2000 it works for all objects except table functions. So now the Diff uses a combined method which always fetches the correct values for the ANSI_NULLS and QUOTED_IDENT flags.
  • Triggers didn't compare correctly (gave false positives) between SQL2000 and SQL2005 databases. The reason was that on SQL2005 the Diff couldn't get some of the flags for triggers the way it gets them on SQL2000. In this version, the method of loading triggers has been changed to work correctly with both SQL2000 and SQL2005.
  • The Diff didn't recognize enabled and disabled triggers. It does not, including their correct comparison and scripting.
  • A new option '[x] Ignore Enabled/Disabled added to the "Ignored details" page of the schema option dialog. It affects the way triggers and constraints are compared.
  • Incorrect table re-creation: When the Diff tries to modify a table by re-creating it (see the 'Scripting/Tables' option page), it has to drop all named constraints, so their names can be used again in the new table. However, the previous version first renamed the table, then tried to drop constraints using the old table name (already not existing) in ALTER TABLE. This has now been fixed by changing the order of scripting: constraints are dropped first, then the table renamed.
  • The following change addresses what looks like a quirk in MS SQL Server. The server sometimes (?) refuses to ALTER a table function because it considers the function dependent on itself (?). In such situations, a DROP/CREATE sequence must be used instead of ALTER FUNCTION. The Diff can't recognize this situation exactly, so it now always re-creates table functions. Or should this be a separate option?

Known issues

  • Trigger comparison doesn't take into account the 'Ignore Not For Replication' option. As the result, NFR and non-NFR triggers (otherwise identical) are always considered different and scripted.

17-Jan-2006 AdeptSQL Diff v. 1.90 Beta 38

Changes in the connection dialog, corrections in saving/loading projects, updated help file.

Quick links: server scan, preferred servers list, network library selection, Help file, error loading comparison

Changes and new features

  • The server scan from the connection panel is restored. It is now implemented as a separate popup dialog where you can see server names being added to the list in real time, as soon as servers on your LAN are responding. You can specify the waiting time or cancel the scan whenever you like.
  • The server scan dialog also allows you to add any of the found servers into the preferred servers list, one which is initially taken from the list of recent servers kept in registry by MSSQL utilities.
  • The connection panel is now extended to include optional network library selection and port selection (for TCP/IP netlib).
  • Help file has been updated and now reflects all recent changes to the program, including the new DataDiff features and changes to the Automation API.

Bug fixes

  • Fixed an error loading comparison files. If a comparison document specified connections to 2 separate servers, the Diff could not recognize that and incorrectly interpreted the DBs as being on the same server.
  • The serial number selection dialog was broken (with assertion failure). This has been fixed now.
  • When a schema scan began, Diff's main window didn't have a chance to repaint itself properly until the connection to server(s) is established. As a result, the Diff would appear frozen or broken for a few seconds. This is fixed now.
  • There is another change in the connection panel: connection timeout set to 0 (as it is by default) should mean "use the default timeout", but in fact it was interpreted as "wait forever", which caused the Diff to freeze if you try to connect to a wrong server. Now unless you specify a positive timeout, the default timeout (usually 15 sec) is used

Known issues and things to do

  • The new features in the connection dialog are not logically complete yet. The server scan dialog can provide netlib and port number as well, but this information currently is not currently passed to the connection panel.
  • The following is not actually a bug, but just another opportunity to make a mistake, a thing that the Diff should check, ideally, but so far doesn't. With the introduction of NetLib selection and port number into the connection panel, you must be aware that the usual form to specify named SQL Server instances ("MachineName\Instance" or ".\Instance" for local servers) won't work with some NetLib selections, specifically with the TCP/IP. Instead, you must specify an IP address or a machine name resolvable to IP, whereas the port number determines the server instance.
  • Incorrect comparison of permissions (false positives) has been reported, but it has not been reproduced yet.

12-Jan-2006 AdeptSQL Diff v. 1.90 Beta 37

Further corrections in the DataDiff, additions to Automation interfaces

Quick links: Automation API, Removed [Refresh Servers] button, Scripting INSERTs

Changes and new features

  • Automation API has been extended to allow loading customized option sets from an .INI file and running comparisons from previously saved comparison documents. You can also specify separate filter expressions when running DataDiff comparison programmatically.
  • Removed [Refresh Servers] button from the connection panel. This is logical, as the Diff no longer scans servers. The button will be back as [Scan available servers], once such funcitonality is implemented.

Bug fixes

  • Scripting INSERTs in DataDiff was broken by the previous Beta. This important functionality is restored now.
  • Some minor corrections in the Automation interfaces.

08-Jan-2006 AdeptSQL Diff v. 1.90 Beta 36

Serious cleaning-up of new (and previously nonfunctional) DataDiff features and various minor corrections.

Quick links:

Bug fixes

  • All new features in DataDiff are finalized and tested. Now you can compare a column only present in one DB against a constant, specify case-insensitive comparison or numeric tolerance, set scripting modes, etc.
  • Various minor corrections.

20-Dec-2005 AdeptSQL Diff v. 1.90 Beta 35

This update changes the way the Diff builds the list of available SQL Servers. This also fixes the nasty freezing problem.

Quick links: list of known servers, connection settings are remembered, SCHEMABINDING dependencies are resolved, freeze, view WITH SCHEMABINDING, No TRANS in side-by-side view, issues from Build33

New features and changes

  • The Diff no longer uses SQLDMO to obtain the list of available servers, using instead the list of known servers the SQL client keeps in Windows registry. This way the Diff doesn't have to spend time pinging the LAN and there is no need to have SQLDMO around. This also happens to solve the "freezing" bug described below

  • Besides keeping connections in saved "comparison documents", the last valid connection settings are remembered as defaults for the next session, as it was before 1.90.
  • For views and table functions with SCHEMABINDING dependencies are resolved correctly. Normally it is possible to change a table without dropping and re-creating views and functions that refer to this table. However, views and funcs which have the WITH SCHEMABINDING clause must be dropped prior changing a table they refer to. So the Diff now does this.

Bug fixes

  • With SQL2005 client installed, the Diff would permanently freeze reading a database (whether SQL2005 or SQL2000 one) if any time before that you happen to pull down the server selection combobox on the connection panel. Apparently SQLDMO somehow messed up messaging or threading within the Diff, so that any subsequent SendMessage call would lock it up. The issue has been solved by removing SQLDMO calls as described above.
  • A view WITH SCHEMABINDING must be dropped and re-created to allow a table to which it refers to be modified. Previous Diff versions ignored this dependency, this version resolves it correctly.
  • No TRANS in side-by-side view: when the transaction scripting is enabled, the BEGIN TRANS... COMMIT code appeared both in the SQL editor (where it is needed) and in the side-by-side view (where it is not). Now the code is not scripted in the side-by-side view.

Known issues

  • All issues from Build33 are still there.
  • The dropped server scan feature is to be restored, eventually, but in a more civilized form: activated from a separate [Locate servers] button, displaying the servers as they are found and allowing to cancel the search any time during the scan
  • The following is related to the schemabinding issue described above and it is not clear whether is a feature or a bug. Suppose you have table T in each database and a schemabound view V in the left-hand one. Suppose there is a change in the table T to be synchronized. We select the table and synchronize from right to left. The update script will drop view V, make changes to the table, but will not re-create the view. From one point of view this is the expected behaviour, because there is no view V in the right-hand DB and by dropping it from the left-hand DB we move towards full synchronization. On the other hand, the view is a separate object and you didn't tell the Diff to synchronize (drop) it, only to sync the table. Your opinion on this would be appreciated.

03-Dec-2005 AdeptSQL Diff v. 1.90 Beta 33

Here is the long-awaited Diff update. During the last few months, the program has suffered a bad case of feature creep, so instead of 1.80 Release, this is again a Beta, but with significantly extended functionality. Adding some level of SQL2005-compatibility has also contributed to the delay. Anyway, the new version is finally here: with comparison document support, re-designed configuration storage, lots of new options in the DataDiff and built-in reports.

What's next? Despite the "Beta" mark and a few known issues (see below), this version should be quite usable, more so than the current "stable" 1.70. It doesn't look like it will stabilize at 1.90, though. A lot of new stuff is on the way, such as full Unicode support, new SQL editor, saving schema snapshots, full support for new SQL2005 objects, to name just the major features. So in the near future you can expect a sequence of "unofficial" interim releases where at least some of these new features will appear, then the whole thing will be released as a major new version, AdeptSQL Diff 2.0.

Changes in our upgrade policy. The Diff has existed for 3 year already and so far there has been no license upgrades. This is a long time for a software product, so once Diff 2.0 is released, most of the existing customers will be expected to pay, if they wish to upgrade to the new version. The exact upgrade prices for 2.0 are yet to be defined, but recent customers will be able to pay less or even get the upgrade for free, depending on how long ago they purchased the product.

So here is our free upgrade offer. If you have been considering buying the Diff, but are unsure about its present "Beta" status, please wait no longer: we guarantee the free upgrade to 2.0 for those who will be purchasing the Diff in December 2005 or later. The upgrade will also be free for those people to whom that has been promised individually.

Quick links: comparison projects, XML table columns, MAX length columns, schema names instead of owner names, reporting and exporting, option storage is re-written, command-line parameters, separate row filter expressions, server-to-server synchronization, throw away identical records, various scripting modes, case-sensitivity option, numeric tolerance option, data comparisons are saved, simultaneously load data

New features and changes

  • The Diff now works with "comparison projects", which can be saved and opened later. The program also keeps a list of recent comparisons, so that you can quickly re-compare any of them.

  • Implemented some basic SQL2005 compatibility. A number of changes has been made in the Diff to ensure that it can read a database schema from MS SQL Server 2005 or MS SQLExpress. The Diff does not yet support most of the new SQL2005 features such as XML schemas, .NET integration or the new variants of SQL CREATE syntax. However, if you have a database freshly ported from SQL2000 to SQL2005, you should be able to use the Diff between them just as before. The only new features this version of Diff does support are these:

    • New XML table columns, both typed and un-typed, are recognized, correctly scripted and synchronized. Typed XML columns are scripted with correct XML schema names, but the XML schemas themselves are not kept as separate entities.
    • The new syntax for MAX length columns is recognized for all character types (CHAR|NCHAR|VARCHAR|NVARCHAR(MAX))
    • According to the new rules in SQL2005, the Diff now uses schema names instead of owner names. However, the "schemas" themselves are not kept as separate entities in the schema tree nor are they scripted (that is, no CREATE/ALTER/DROP SCHEMA yet).
  • The reporting and exporting functionality has been added. The Diff now includes a 3rd-party reporting and exporting component, which allows comparison reports to be previewed, printed or saved in any of the following formats: HTML, PDF, RTF, Excel. Comparison reports (although rather basic ones) are implemented for both schema- and data- comparisons. Cloning and limited customization of the provided report templates is technically possible, but is not documented yet.
  • The option storage is re-written to allow keeping all program options either in the Windows registry (as it was before) or in an .INI file. The latter allows the Diff to run in "portable" mode: from a removable media like a flash drive, without installation.
  • You can now start the Diff with some command-line parameters, including a comparison project's name and switches controlling where to take the program options from (registry or a specific INI file) and where to save them back.
  • New DataDiff options caused re-design of the column configuration dialog. Now it has two separate tabs for table-level configuration and for the column-level one. The new DataDiff options include:
    • Option to specify two separate row filter expressions for the two tables;
    • Option to use direct server-to-server synchronization, when the data is passed between the servers or between databases on the same server, as opposite to using the data loaded into the Diff. Therefore, you can synchronize large BLOB data without actually keeping it all in memory (in which case the Diff only needs to keep a 16-byte MD5 digest)
    • Option to throw away identical records and reuse the memory. In this mode only changed rows have to be kept in memory, which means the Diff can now compare tables of practically unlimited size.
    • There are now several comparison styles and various scripting modes that can be changed for individual columns. Comparison styles include case-sensitivity option for character columns and numeric tolerance option for the numeric ones. Scripting modes include "client" (script using loaded values), "server" (script inserts/updates using values directly from the opposite database), "skip" (exclude from the script) and "literal" (to be used for INSERTs when one of the columns is missing).
  • Details of data comparisons are saved with the comparison project. This means that once you compare a pair of tables, all table-level and column-level settings are preserved: filter expression(s), ignored/compared/key columns, scripting specifics for each of the columns, etc.
  • The DataDiff now uses separate threads to simultaneously load data from both tables. For databases situated on different SQL servers such asynchronous operation may result in significantly faster data loading.
  • A new option page "Connection defaults" has been added. There you can specify the server names, logins and connection timeouts you are likely to use for a new comparison. There is also a new option causing the Diff to force certain QUOTED_IDENTIFIERS and ANSI_NULL settings when a connection is being open.

Bug fixes

  • A very serious problem was introduced in the last Beta: in trial mode, even immediately after its installation, the program would display the "Trial has expired" message and demand a key to run. This update not only fixes this problem, but actually resets your trial period.
  • There is a command in the popup menu of the built-in SQL editor which is supposed to launch MS Query Analyzer from the Diff, passing to it the target connection parameters and the selected SQL text to be edited or executed. As it turned out, the menu item was disconnected from the actual code launching MSQA, so the command was doing nothing. The functionality of the command is now restored.
  • Numerous minor corrections throughout the program

Known issues

  • [Corrected in Beta 36] The logic for enabling/disabling column comparison and scripting controls in the new DataDiff column selection dialog is not finalized. It is not always clear what the new scripting modes (client/server/literal/skip) will do in each particular situation.
  • Reporting is not complete. The default schema report is supposed to include some comments detalizing the differences (e.g. for a table it could be like "columns added", "constraints removed", etc). This information is not yet available.
  • None of the new Diff features has been documented in the help file yet.
  • Automation API has not been changed yet. It is supposed to support the new "comparison documents" mechanism. At least it should be possible to open programmatically a previously saved comparison document; ideally the API should give access to individual project-level and general options.

23-May-2005 AdeptSQL Diff v. 1.80 Beta 32

This version contains important improvements in the SQL code generation: the Diff can now correctly script various changes which in earlier versions would require manual editing of the script. There is also a number of corrections in other areas. Since the changes made to the program have been rather extensive, this build is considered a BETA, with a production version to follow soon.

Quick links: Recreate tables, recreate dependent views, CREATE if table doesn't exist, new type conversion matrix, default values for each data type, better at resolving dependencies, closes connections, registration dialog is redesigned

New features and changes

  • New "Recreate tables" checkbox on the 'Options/Scripting/Tables' page tells the Diff to re-create tables (instead of altering individual columns) whenever it is necessary to keep the correct column order. If you set this option, the Diff will also consider changes in the column order as signficant, display them in the tree and synchronize them. Regardless of this option, the Diff will re-create a table if there is no other way to script a particular change (e.g. making a column IDENTITY in a table with data)
  • An option to recreate dependent views has been added (also on the Scripting/Tables page): when columns in a table change, it may be necessary to re-submit all dependent views to the server, so that it could update its internal column lists.
  • Yet another new option allows to script the "CREATE if table doesn't exist" logic before any table is created. Currently this feature is only implemented for tables, scripting similar logic for other objects and for DROPs may be added later.
  • A new type conversion matrix is now used to properly generate column type changes: in some situations ALTER COLUMN can be used, in others a column must be re-created and the data copied (such as TEXT to NTEXT conversions).
  • When adding a NOT NULL column into a table with data, a special SQL sequence is now used to ensure that there are correct default values for the new columns. The Diff maintains a list of default values for each data type, which you can customize on the 'Scripting/Tables/Default values' page.
  • The Diff is now much better at resolving dependencies(FKs and other constraints), although some situations can still confuse it.
  • The Diff now closes connections after comparison. Previous versions used to keep the database connections open during the whole session. If for any reason a connection would expire or got broken while viewing the differences, you'd be unable to run any scripts or refresh the comparison. As of ver. 1.80, both connections are closed as soon as the schema data is loaded, then re-opened as required when you start executing the scripts.
  • The registration dialog is redesigned for easier activation and re-issuing of the keys.
  • The "Choose serial" dialog is also redesigned and some new methods of license binding are added: low-level (format-resistant) IDE disk binding and binding to a portable USB storage device (flash drive). NOTE that the flash drive binding may or may not work with your particular flash drive device, depending on its model and manufacturer.

Bug fixes

  • Automation: The SelectNextDifference corrected. This method didn't work correctly when several schema objects had been previously selected.
  • DataDiff: in some unusual situations the program would try to synchronize rows with changes in "hidden" columns. Although (correctly) no code would be generated for such rows, all the extra checks and issuing of warnings for each row would slow the scripting down tremendously. The new version doesn't have this problem so that DataDiff scripting is very fast.
  • In one of the recent updates, the Diff lost its ability to sort schema items alphabetically. The correct ordering has been restored.
  • In some situation, the same 'DROP INDEX' statement could be scripted twice. This has been fixed.
  • A few other minor corrections in various places.

03-Mar-2005 AdeptSQL Diff v. 1.70 [Build 29]

This version contains important bugfixes in DataDiff automation interface and some interesting improvements in DataDiff GUI

Quick links: SelectNextDifference(), GetRowIndex()

Corrections in DataDiff automation interface

  • SelectNextDifference() method did not work correctly when called with Expand parameter (SelectNextDifference(True)): it selected the next changed row starting from the first selected row, so it never went further down than the second changed record. Fixed.
  • GetRowIndex() function returned wrong value. Fixed.

Changes in DataDiff GUI

  • You can now use Shift with "Select Next/Prior Changed Row" commands to select multiple rows. This trick works both with toolbar buttons and with keyboard shortcuts. That is, you can use Ctrl-Alt-Shift-DOWN|UP to select the next or previous change, adding it to all previously selected rows.
  • Tooltip texts for the "Show Difference script" commands incorrectly indicated Ctrl-Shift-LEFT|RIGHT as shortcuts for these command. Actually, the shortcuts are Ctrl-Alt-LEFT|RIGHT. The tooltips are now updated accordingly.
  • DataDiff now opens SQL editor as an "owned" window, which means that the editor window stays on top of DataDiff, but is not modal (you can freely move focus between DataDiff and code). Together with the Ctrl-Alt-<Arrows> shortcuts described above, this means you can conveniently traverse the dataset from one change to another, instantly synchronizing records in either direction.

22-Feb-2005 AdeptSQL Diff v. 1.70 [Build 28]

This version contains several minor bugfixes and improvements

Quick links: "SaveAs" in Unicode or UTF8, Changed some defaults, xplog70.dll

New features

  • "SaveAs" in Unicode or UTF8. The "Save As" dialog in the SQL editor now allows to specify saving in OEM (as before), Unicode or UTF8 formats. NOTE that it does not make the program truly Unicode-enabled: it can only display and correctly save scripts containing national character from a single code page. For example, you can have Latin and Cyrillic letters, or Latin and Greek, but not Cyrillic and Greek together.
  • Changed some defaults in the Schema Options dialog. Now a freshly installed copy of Diff will compare object- and statement permissions and will check whether tables have data or not. Before, these two options had to be manually enabled from the Schema Options dialog. These changes in initial setting don't affect those who is upgrading their existing copy of AdeptSQL Diff.

Bug fixes

  • xplog70.dll is no longer needed. That DLL is a part of standard MS SQL Server distribution, but sometimes DBAs remove it for security reasons. With xplog70.dll removed, the Diff could no longer access the schema, although it was only needed to obtain server's version number. Now the version information is fetched in a different way, so schema loading does not depend on that DLL.

05-Feb-2005 AdeptSQL Diff v. 1.70 [Build 27]

This version contains several minor improvements in DataDiff, and fixes a bug in handling SQL_VARIANT columns

Quick links: "Hide LEFT-only objects", "Hide changed rows", DataDiff filters can be persistent, SQL_VARIANT was not supported

New features

  • "Hide LEFT-only objects" filter added to the schema tree filter menu. For historical reasons, previous versions only had "Hide RIGHT-only objects" option there.
  • "Hide changed rows" filtering option is added to the DataDiff view. It didn't look necessary until a user pointed out that sometimes he'd only be interested in "left-only" and "right-only" records as it allows him to quickly locate incorrectly entered primary keys.
  • DataDiff filters can be persistent now. This is implemented in exactly the same way as for the schema tree filters: there is now a new item in the DataDiff filter menu, indicating whether the filters should be stored in the registry.

Fixed bugs

28-Jan-2005 AdeptSQL Diff v. 1.70 [Build 26]

Improved support for collation orders: some new options added, changes made in comparison and scripting. New options displaying "Summary collections"

Quick links: Redesigned "Ignored Details" page, Added "Ignore collation", New "Summary collections", Column collations not synchronized correctly, Problem comparing encrypted procs

New features

  • Redesigned "Ignored Details" page: controls in this option page has been rearranged in a (hopefully) more logical order.
  • Added "Ignore collation" checkbox on the same option page. It allows to ignore the differences in the COLLATE attributes of table columns and the entire database. Both the comparison and the scripting code have been modified to take into account the new setting.
  • New "Summary collections": Previous versions would display copies of all foreign keys and indexes (normally scattered throughout the schema tree) under a special node at the bottom of the tree, called "Summary collections". This version adds a new option page ("Display/Summary collections"), where you can choose which exactly objects should end up in their special "summary collections". Besides FKs and indexes supported before, you can now display there other constraints, triggers, permissions and extended properties.
  • For top-level objects that have different owners in the two databases, but considered matched according to the specified "owner map" (see the "Schema Scan/Ownership" option page), the program now displays both names in the schema tree (i.e. "dbo.table1 / user1.table1" instead of just "dbo.table1")
  • The help file has been updated according to the GUI changes described above

Fixed bugs

  • Column collations not synchronized correctly: when the only difference in a given character column was its collation, previous versions of the Diff would display the columns as changed, but would be unable to produce the synchro script for them. This is fixed now.
  • Problem comparing encrypted procs: as described here, previous versions would only respect the "consider changed" option when the unencrypted DB is on the left-hand side of the comparison. In this version, the comparison works correctly in both directions.

06-Jan-2005 AdeptSQL Diff v. 1.70 [Build 25]

In this release we've added two new options for scripting of encrypted objects and made some minor correction to the GUI. The new options can be found on the "Options/Scripting/Procedures..." page of the Schema Options dialog

Quick links:

New features

  • One is "Script with SQLShield encryption", which is only useful for those who have SQL Shield server plugin installed. When this option is enabled, the Diff would generate a special "magic" comment ("WITH /*sqlshield*/ ENCRYPTION") causing the procedure to be encrypted in a special "unbreakable" way.
  • The other option is "Protect from tracing" and it causes another "magic" comment to be generated for encrypted procedures ("WITH ENCRYPTION /*sp_password*/"). When a procedure "WITH ENCRYPTION" is sent to the server, its full definition can be caught in a MS SQL Profiler log, which creates a security risk. However, if the profiler finds "sp_password" anywhere in the SQL (even in a comment), it would not show the statement text in the log.

Fixed bugs

  • Cleaner startup and closing of the current comparison: previous versions used to start-up with the empty schema panel visible, and leave visible the side-by-side panel and the message panel after you close a comparison. Now the program shows nothing but the connection dialog when there is no connection open.
  • There is an "Include owner name" group of options on the "Options/Schema scan/Ownership" page of the Schema Option dialog. One of its settings - "Don't include owner name" - was not correctly saved, so that after you choose it and restart the program, it would be back to the "Only if different..." setting. This version fixes the bug.
  • In trial mode, the previous versions used to look up a license file on removable disks (CDs or flash-memory). In some configurations it would cause ths system to pop up a "No disk" error message box. This disk enumeration is now removed.

Other changes

  • The help file has been updated to reflect the changes and the new options appeared in the recent releases.

Known issues

  • There is an option telling the Diff to consider any encrypted procedure different from its open-text counterpart and therefore always generate update script for such entities. However, this only works with the open-text SPs in the left-hand DB and the encrypted ones in the right-hand DB. Compare it the other way around, and the two procs would always be shown as identical. This problem will be fixed in a future release to make the comparison logic work same both ways. Meanwhile work around the problem by specifying the DB with encrypted procedures as the right-hand one in the comparison.

   
The CHM file was converted to HTML by chm2web software.