Как создать INSERT script для существующей таблицы SQL Server, содержащей все сохраненные строки?

Я ищу способ создания "Создать и вставить все строки" script с помощью SQL Management Studio 2008 R2.

Я знаю, что могу создать "create table" script.

Я также могу создать "insert in" script, но он будет генерировать только одну строку с заполнителями.

Есть ли способ создать вставку script, которая содержит все сохраненные в настоящее время строки?

Ответ 1

Да, но вам нужно запустить его на уровне базы данных.

Щелкните правой кнопкой мыши базу данных в SSMS, выберите "Задачи", "Сгенерировать скрипты...". По мере прохождения вы перейдете в раздел "Параметры сценариев". Нажмите "Дополнительно", и в появившемся списке, где говорится "Типы данных, чтобы script", у вас есть возможность выбрать "Данные и/или Схема".

Screen shot of Advanced Scripting Options

Ответ 2

Этот script создает инструкции вставки ваших существующих данных. Это хранимая процедура, которую нужно запустить один раз, а затем она предназначена для вас.

Я пытался найти этот материал некоторое время, но не был доволен результатами, поэтому я написал эту хранимую процедуру.

Пример:

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

(1) Здесь dbo является схемой, а test - табличным именем и 1=1 является условием.

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

(2) Здесь dbo - схема, а test - имя таблицы и name='neeraj' - условие.

Вот хранимая процедура

/*
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 @[email protected]                            
ELSE                            
SELECT @[email protected]                            

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 [email protected]_name AND [email protected]_name         


SELECT @Total_Rows= Count(1) 
FROM @COLUMNS                              

SELECT @Table_name= '['[email protected]_name+']'                      

SELECT @Schema_name='['[email protected]_name+']'                      

While (@Counter<[email protected]_Rows )                              
begin                               
--PRINT @Counter                              

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

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

SET @[email protected]+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 '[email protected]_name+'.'[email protected]_name+ '('[email protected]+')' +' Values( '+'''' + '+'[email protected]                              

SELECT @[email protected]+'+'+ ''')'''                              

SELECT @CONDITIONS= 'Select  '[email protected] +'FRom  ' [email protected]_name+'.'[email protected]_name+' With(NOLOCK) ' + ' Where '[email protected]                              
print(@CONDITIONS)                              
Exec(@CONDITIONS)  

Ответ 3

Да, используйте коммерческую, но недорогую SSMS Tools Pack addin, в которой есть отличная команда "Создать вставки из функций результатов, таблиц или баз данных"