生成insert語句的存儲過程

CREATE Procedure DBGenData

    @tableName Varchar(100)--表名

AS

    DECLARE @IsIdentity INT

    DECLARE @columnName VARCHAR(100)--列名

    DECLARE @TypeName VARCHAR(100)--數據類型

    DECLARE @columns VARCHAR(3000)--

    DECLARE @columnsAndhead VARCHAR(3000)--

     

    SET @columnsAndhead = 'INSERT INTO '+@tableName+'(['

    SET @columns = ''

     

    --獲取表的所有字段名稱

    DECLARE a CURSOR FOR 

        SELECT COLUMNPROPERTY( a.id,a.name,'IsIdentity') AS IsIdentity, a.[NAME] AS ColumnName ,b.[NAME] AS TypeName 

        FROM syscolumns a INNER JOIN systypes b ON a.xtype=b.xtype AND b.xtype=b.xusertype 

        WHERE a.[id]=(SELECT [id] FROM sysobjects WHERE [NAME]=@tableName)

     

    OPEN a



    FETCH NEXT FROM a INTO @IsIdentity, @columnName ,@TypeName

        WHILE @@FETCH_STATUS = 0

            BEGIN

                IF @IsIdentity =0

                    BEGIN

                        IF @TypeName IN ('bigint','bit','decimal','float','int','money','numeric','real','smallint','smallmoney','tinyint')

                            BEGIN

                                SET @columns = @columns + 'ISNULL(CAST(['+@columnName +'] AS VARCHAR),''NULL'')+'',''+'

                            END

                        ELSE

                            BEGIN

                                SET @columns = @columns+ '''''''''+ ISNULL(CAST(['+@columnName +'] AS VARCHAR),''NULL'')+ ''''''''+'',''+'

                            END

                        SET @columnsAndhead = @columnsAndhead + ''+ @columnName +'],[' 

                    END

                FETCH NEXT FROM a INTO @IsIdentity, @columnName ,@TypeName

             END





    SELECT @columnsAndhead = left(@columnsAndhead,len(@columnsAndhead)-2) +') VALUES('''

    SELECT @columns = left(@columns,len(@columns)-5)





    CLOSE a

    DEALLOCATE a 



    exec('select '''+@columnsAndhead+'+'+@columns +'+'')'' as InsertSQL from '+@tableName)

     

GO
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章