這應該讓你開始:
DECLARE @TargetTableName sysname = 'Customer',
@SourceTableName sysname = '#temp'
-- start the dynamic sql
DECLARE @Sql nvarchar(max) = 'INSERT INTO '+ @TargetTableName +' ('
-- get the columns list
SELECT @Sql = @Sql + COLUMN_NAME +', '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TargetTableName
-- remove the last ', ' and add ') SELECT'
SET @Sql = LEFT(@Sql, LEN(@sql)-2) +') SELECT '
-- Select the column names and types to create
-- CAST(ColumnName As DataType[(Length)]) for each column
SELECT @Sql = @Sql + 'CAST('+ COLUMN_NAME +' As '+ DATA_TYPE +
CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 THEN
'(max)'
WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL THEN
'('+ CAST(CHARACTER_MAXIMUM_LENGTH as varchar(10)) +')'
ELSE
''
END +'), '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TargetTableName
-- remove the last comma and add the FROM clause
SET @Sql = LEFT(@Sql, LEN(@sql)-1) + ' FROM '+ @SourceTableName
SELECT @Sql -- this, of course, should be EXEC @Sql, but I recommend leaving it as SELECT or PRINT until you get the exact sql you need.
注意:日期欄,你應該考慮使用CONVERT代替CAST,特別是如果你知道在#temp表你的日期格式。
您可以直接從溫度導入。 Sql服務器會這樣做,例如'123'在內部轉換爲123,除非直到找到像123x這樣的數據。 – Azar 2014-09-12 10:32:20
如果您不知道數據類型,您如何知道您的值將能夠正確轉換爲目標數據類型? – 2014-09-12 13:21:59