这里有一些代码让你开始。它提取一个主键(假设一列主键,这可能是或者可能不是你的有效假设),并且抓取剩余列的逗号分隔字符串列表。
从这里您可以使用拆分字符串构建一个sql字符串,该字符串从主键上的硬编码链接服务器连接两个相同名称的表,并将每个列进行比较以获得差异,然后执行动态SQL。我已经包括了一些测试脚手架,所以你可以通过它的工作:
DECLARE @tableName sysname;
SET @tableName = 'some table'
-- Validate parameter
IF @tableName IS NULL OR NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @tableName AND TABLE_TYPE = 'BASE TABLE')
BEGIN
RAISERROR ('Invalid table name specified', 16, 1);
RETURN;
END;
-- Validate table has a primary key
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = @tableName)
BEGIN
RAISERROR ('Specified table does not have a primary key', 16, 1);
RETURN;
END;
-- Get info about the Primary Key columns
DECLARE @pkcolName sysname;
SELECT @pkcolName = c.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.COLUMNS c ON kcu.TABLE_NAME = c.TABLE_NAME AND kcu.COLUMN_NAME = c.COLUMN_NAME
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY' AND tc.TABLE_NAME = @tableName AND kcu.ORDINAL_POSITION = 1
-- Grab the names of all the remaining columns
DECLARE @nonKeyColumns nvarchar(MAX);
SELECT @nonKeyColumns = STUFF ((SELECT N'], [' + c.name
FROM sys.columns c
WHERE object_id = (select top 1 object_id FROM sys.objects where name = @tableName)
AND c.name <> @pkcolName
ORDER BY c.column_id
FOR XML PATH('')), 1, 2, '') + ']';
SELECT @pkcolName
SELECT @nonKeyColumns
请不要使用不适用于您的问题 –