Jak wygenerować skrypt INSERT dla istniejącej tabeli SQL Server, która zawiera wszystkie zapisane wiersze?

Szukam sposobu na wygenerowanie skryptu "Utwórz i wstaw wszystkie wiersze" za pomocą SQL Management Studio 2008 R2.

Wiem, że mogę utworzyć skrypt "Utwórz tabelę".

Mogę również utworzyć skrypt "insert in", ale to wygeneruje tylko jeden wiersz z symbolami zastępczymi.

Czy istnieje sposób na wygenerowanie skryptu Wstaw, który zawiera wszystkie aktualnie przechowywane wiersze?

Author: marc_s, 2011-02-21

3 answers

Tak, ale musisz uruchomić go na poziomie bazy danych.

Kliknij prawym przyciskiem myszy bazę danych w SSMS, wybierz "zadania", " Generuj Skrypty...". W trakcie pracy przejdziesz do sekcji "Opcje skryptów". Kliknij na "Zaawansowane", a na liście, która się pojawi, gdzie jest napisane "typy danych do skryptu", masz możliwość wyboru danych i / lub schematu.

Zrzut ekranu z zaawansowanymi opcjami skryptów

 382
Author: Thomas Rushton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-15 20:23:55

Ten skrypt generuje instrukcje insert z istniejących danych. Jest to procedura składowana, którą musisz uruchomić raz, a następnie jest dostosowana do ciebie.

Próbowałem znaleźć tego rodzaju rzeczy przez jakiś czas, ale nie byłem zadowolony z wyników, więc napisałem tę procedurę składowaną.

Przykład:

Exec [dbo].[INS]  'Dbo.test where 1=1'

(1) tutaj dbo jest schematem, a test to tablename, a {[4] } to warunek.

Exec [dbo].[INS]  'Dbo.test where name =''neeraj''' * for string

(2) tutaj dbo jest schematem i testem jest tablename i name='neeraj' jest warunek.

Oto procedura składowana

/*
Authore : neeraj prasad sharma (please dont remove this :))
Example (1) Exec [dbo].[INS]  'Dbo.test where 1=1'
        (2) Exec [dbo].[INS]  'Dbo.test where name =''neeraj''' * for string

here Dbo is schema and test is tablename and 1=1 is condition

*/


CREATE procedure  [dbo].[INS]                              
(                                                          
   @Query  Varchar(MAX)                                                          
)                              

AS                              

SET nocount ON                  

DECLARE @WithStrINdex as INT                            
DECLARE @WhereStrINdex as INT                            
DECLARE @INDExtouse as INT                            

DECLARE @SchemaAndTAble VArchar(270)                            
DECLARE @Schema_name  varchar(30)                            
DECLARE @Table_name  varchar(240)                            
DECLARE @Condition  Varchar(MAX)                             

SET @WithStrINdex=0                            

SELECT @WithStrINdex=CHARINDEX('With',@Query )                            
, @WhereStrINdex=CHARINDEX('WHERE', @Query)                            

IF(@WithStrINdex!=0)                            
SELECT @INDExtouse=@WithStrINdex                            
ELSE                            
SELECT @INDExtouse=@WhereStrINdex                            

SELECT @SchemaAndTAble=Left (@Query,@INDExtouse-1)                                                     
SELECT @SchemaAndTAble=Ltrim (Rtrim( @SchemaAndTAble))                            

SELECT @Schema_name= Left (@SchemaAndTAble, CharIndex('.',@SchemaAndTAble )-1)                            
,      @Table_name = SUBSTRING(  @SchemaAndTAble , CharIndex('.',@SchemaAndTAble )+1,LEN(@SchemaAndTAble) )                            

,      @CONDITION=SUBSTRING(@Query,@WhereStrINdex+6,LEN(@Query))--27+6                            


DECLARE @COLUMNS  table (Row_number SmallINT , Column_Name VArchar(Max) )                              
DECLARE @CONDITIONS as varchar(MAX)                              
DECLARE @Total_Rows as SmallINT                              
DECLARE @Counter as SmallINT              

DECLARE @ComaCol as varchar(max)            
SELECT @ComaCol=''                   

SET @Counter=1                              
SET @CONDITIONS=''                              

INSERT INTO @COLUMNS                              
SELECT Row_number()Over (Order by ORDINAL_POSITION ) [Count], Column_Name 
FROM INformation_schema.columns 
WHERE Table_schema=@Schema_name AND table_name=@Table_name         


SELECT @Total_Rows= Count(1) 
FROM @COLUMNS                              

SELECT @Table_name= '['+@Table_name+']'                      

SELECT @Schema_name='['+@Schema_name+']'                      

While (@Counter<=@Total_Rows )                              
begin                               
--PRINT @Counter                              

SELECT @ComaCol= @ComaCol+'['+Column_Name+'],'            
FROM @COLUMNS                              
WHERE [Row_number]=@Counter                          

SELECT @CONDITIONS=@CONDITIONS+ ' + Case When ['+Column_Name+'] is null then ''Null'' Else '''''''' + Replace( Convert(varchar(Max),['+Column_Name+']  ) ,'''''''',''''  ) +'''''''' end+'+''','''                                                     
FROM @COLUMNS                              
WHERE [Row_number]=@Counter                              

SET @Counter=@Counter+1                              

End                              

SELECT @CONDITIONS=Right(@CONDITIONS,LEN(@CONDITIONS)-2)                              

SELECT @CONDITIONS=LEFT(@CONDITIONS,LEN(@CONDITIONS)-4)              
SELECT @ComaCol= substring (@ComaCol,0,  len(@ComaCol) )                            

SELECT @CONDITIONS= '''INSERT INTO '+@Schema_name+'.'+@Table_name+ '('+@ComaCol+')' +' Values( '+'''' + '+'+@CONDITIONS                              

SELECT @CONDITIONS=@CONDITIONS+'+'+ ''')'''                              

SELECT @CONDITIONS= 'Select  '+@CONDITIONS +'FRom  ' +@Schema_name+'.'+@Table_name+' With(NOLOCK) ' + ' Where '+@Condition                              
print(@CONDITIONS)                              
Exec(@CONDITIONS)  
 25
Author: Neeraj Prasad Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-22 07:26:51

Tak, użyj komercyjnego, ale niedrogiego SSMS Tools Pack addin, który ma sprytną funkcję "Generuj instrukcje Wstaw z wyników, tabel lub bazy danych"

 17
Author: gbn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-16 13:48:14