这是您的解决方法。
/************************************************************************************************
CREATE SAMPLE TABLE AND ADD SAMPLE DATA
************************************************************************************************/
CREATE TABLE Products
(
ID UNIQUEIDENTIFIER NOT NULL,
ProductTypeID INT NOT NULL,
ParentProductID INT NOT NULL,
Code VARCHAR(255) NOT NULL,
ts TIMESTAMP
);
INSERT Products (ID, ProductTypeID, ParentProductID, Code)
VALUES (NEWID(), 1, 1, 'SKU');
/************************************************************************************************
DECLARE INPUT VARIABLES
************************************************************************************************/
DECLARE @SimpleProducttype INT = 2,
@SimpleProductID INT = 2,
@Sku VARCHAR(255) = 'SKU',
@ID UNIQUEIDENTIFIER = NEWID();
/************************************************************************************************
GENERATE INSERT SCRIPT USING SYS.COLUMNS AND XML CONCATENATION
************************************************************************************************/
DECLARE @SQL NVARCHAR(MAX) =
'INSERT Products (' +
STUFF(( SELECT ',' + QUOTENAME(c.name)
FROM sys.columns AS c
WHERE c.[object_id] = OBJECT_ID(N'dbo.Products')
AND c.name != 'ts'
ORDER BY c.column_id
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
+ ')
SELECT ' +
STUFF(( SELECT ',' + CASE WHEN c.Name IN ('ProducttypeID', 'ParentProductID', 'ID') THEN '@' + Name
ELSE QUOTENAME(c.name)
END
FROM sys.columns AS c
WHERE c.[object_id] = OBJECT_ID(N'dbo.Products')
AND c.name != 'ts'
ORDER BY c.column_id
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '') + '
FROM Products
WHERE Code = @sku;';
/************************************************************************************************
EXECUTE THE SCRIPT
************************************************************************************************/
EXECUTE sp_executesql
@SQL,
N'@ParentProductID INT, @ProductTypeID INT, @ID UNIQUEIDENTIFIER, @Sku VARCHAR(255)',
@ParentProductID = @SimpleProductID,
@ProducttypeID = @SimpleProducttype,
@ID = @ID,
@Sku = @Sku;
为示例表生成的脚本是:
INSERT Products ([ID],[ProductTypeID],[ParentProductID],[Code])
SELECT @ID,@ProductTypeID,@ParentProductID,[Code]
FROM Products
WHERE Code = @sku;
这是一个 UGLY hack,我不建议您使用它,我发布它是为了展示仅列出列会变得多么简单,并且每次您的架构更改时,使对存储过程的更改。