Как создать 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, в которой есть отличная команда "Создать вставки из функций результатов, таблиц или баз данных"