2015-07-10 33 views

回答

0

IF OBJECT_ID( 'sysGenerateInsert', 'P')IS NOT NULL BEGIN DROP PROC sysGenerateInsert PRINT 'sysGenerateInsert SP成功刪除' END GO

CREATE PROC sysGenerateInsert(@ TblName varchar(128)) AS BEGIN --------------------------------------- -------------------------- - 目的:生成給定表的INSERT語句 - *多行插入 - *複製生成的腳本,並刪除最後一個逗號 - 和執行 - - 用法:EXEC sysGenerateInsert '表名' - - 創建者:古魯普拉薩德開:3 -Jan-2010 --------------------------------------------- -------------------- CREATE TABLE #ColumnMetaData( ID INT IDENTITY(1,1), IsChar INT, COLNAME VARCHAR(128) )

IF NOT EXISTS (SELECT * 
       FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_NAME = @TblName) 
BEGIN 
    RAISERROR('No columns found for table %s or Table not exist', 16,-1, @TblName) 
    RETURN 
END 

INSERT #ColumnMetaData (IsChar, ColName) 
SELECT CASE WHEN DATA_TYPE LIKE '%char%' 
      THEN 1 
      ELSE 0 END IsChar, 
     COLUMN_NAME  ColName 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = @TblName 
ORDER BY ORDINAL_POSITION 

DECLARE @InsertIntoStmt VARCHAR(MAX), 
     @InsertIntoData VARCHAR(MAX) 

SELECT @InsertIntoStmt = 'SELECT '' INSERT INTO ' + @TblName + ' (' 
SELECT @InsertIntoData = 'SELECT ''(''+' 

SELECT @InsertIntoStmt = @InsertIntoStmt + ColName + ',' 
FROM #ColumnMetaData 

SELECT @InsertIntoData = @InsertIntoData 
     + ' CASE WHEN ' + ColName + ' IS NULL ' 
     + ' THEN ''NULL'' ' 
     + ' ELSE ' 
     +  CASE WHEN IsChar = 1 
        THEN ''''''''' + ' + ColName + ' + ''''''''' 
        ELSE 'CONVERT(VARCHAR(20),' + ColName + ')' 
       END 
     + ' END + '','' + ' 
FROM #ColumnMetaData 

SELECT @InsertIntoStmt = LEFT(@InsertIntoStmt,LEN(@InsertIntoStmt)-1) + ') VALUES ''' 
SELECT @InsertIntoData = LEFT(@InsertIntoData,LEN(@InsertIntoData)-8) + ' + ''),'' FROM ' + @tblName 

EXEC (@InsertIntoStmt + ' UNION ALL ' + @InsertIntoData) 

DROP TABLE #ColumnMetaData 

END go

PRINT'sysGenerateInsert SP成功創建'