Error Message:
Msg 4966, Level 16, State 1, Line 2
ALTER TABLE SWITCH statement failed. Computed column ‘%.*ls’ defined as ‘%.*ls’ in table ‘%.*ls’ is different from the same column in table ‘%.*ls’ defined as ‘%.*ls’.
Severity level:
16.
Description:
This error message appears when you try to execute an ALTER TABLE SWITCH command, for which a computed column of the same name has a different definition in the source and target table.
Consequences:
The T-SQL statement can be parsed, but causes the error at runtime.
Resolution:
Errors of the Severity Level 16 are generated by the user and can be fixed by the SQL Server user. The statement cannot be executed this way. The definition of the computed column must be the same in source and target.
Versions:
This error message was introduced with SQL Server 2005.
Example(s):
USE Pubs
GO
SET NUMERIC_ROUNDABORT OFF;
SET ANSI_PADDING,
ANSI_WARNINGS,
CONCAT_NULL_YIELDS_NULL,
ARITHABORT,
QUOTED_IDENTIFIER,
ANSI_NULLS ON;
GO
CREATE PARTITION FUNCTION myPartFunction (int)
AS RANGE LEFT FOR VALUES (1, 10, 100);
GO
CREATE PARTITION SCHEME myPartScheme
AS PARTITION myPartFunction
ALL TO ([PRIMARY]);
GO
CREATE TABLE myPartTable
(
c1 int,
c2 AS c1 * 3
)
ON myPartScheme (c1);
GO
CREATE TABLE myNonPartTable
(
c1 int,
c2 AS c1 * 2
)
ON [PRIMARY];
GO
ALTER TABLE myPartTable SWITCH PARTITION 1 TO dbo.myNonPartTable ;
GO
DROP TABLE myNonPartTable, myPartTable;
DROP PARTITION SCHEME myPartScheme;
DROP PARTITION FUNCTION myPartFunction;
Remarks:
In the above example we try to execute an ALTER TABLE SWITCH command. Because the computed column c2 has a definition of c1 * 3 in the source table, but c1 * 2 in the target table, the error is raised.