sql server tutorial কিভাবে একটি বিদ্যমান SQL সার্ভার টেবিলের জন্য একটি INSERT স্ক্রিপ্ট তৈরি করবেন যা সমস্ত সংরক্ষিত সারি অন্তর্ভুক্ত করে?




sql server tutorial (4)

এই স্ক্রিপ্ট আপনার বিদ্যমান তথ্য সন্নিবেশ বিবৃতি জেনারেট করে। এটি একটি সংরক্ষিত পদ্ধতি যা আপনাকে একবার চালানো দরকার এবং তারপরে এটি আপনার জন্য তৈরি করা হয়।

আমি কিছু সময়ের জন্য এই ধরনের জিনিস খুঁজে বের করার চেষ্টা করেছি কিন্তু ফলাফলগুলির সাথে সন্তুষ্ট ছিলাম না, তাই আমি এই সংরক্ষিত পদ্ধতিটি লিখেছিলাম।

উদাহরণ:

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

(1) এখানে dbo স্কিমা এবং পরীক্ষাটি dbo এবং 1=1 শর্ত।

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

(2) এখানে dbo স্কিমা এবং পরীক্ষাটি name='neeraj' এবং 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 @INDExtouse[email protected]WithStrINdex                            
ELSE                            
SELECT @INDExtouse[email protected]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[email protected]Schema_name AND table_name[email protected]Table_name         


SELECT @Total_Rows= Count(1) 
FROM @COLUMNS                              

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

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

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

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

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

SET @Counter[email protected]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 '[email protected]Schema_name+'.'[email protected]Table_name+ '('[email protected]ComaCol+')' +' Values( '+'''' + '+'[email protected]CONDITIONS                              

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

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

আমি এসকিউএল ম্যানেজমেন্ট স্টুডিও 2008 R2 এর সাথে "সমস্ত সারি তৈরি এবং সন্নিবেশ করা" স্ক্রিপ্ট তৈরি করার একটি উপায় খুঁজছি।

আমি জানি যে আমি একটি "তৈরি টেবিল" স্ক্রিপ্ট তৈরি করতে পারি।

আমি একটি "সন্নিবেশ" স্ক্রিপ্টও তৈরি করতে পারি, তবে এটি স্থানধারকগুলির সাথে শুধুমাত্র একটি সারি তৈরি করবে।

বর্তমানে সঞ্চিত সারি ধারণকারী একটি সন্নিবেশ স্ক্রিপ্ট জেনারেট করার কোন উপায় আছে কি?


হ্যাঁ, তবে আপনাকে ডাটাবেসের স্তরে এটি চালানোর দরকার হবে।

SSMS এ ডাটাবেসটি ডান-ক্লিক করুন, "কার্যগুলি" নির্বাচন করুন, "স্ক্রিপ্ট জেনারেট করুন ..."। আপনি যেভাবে কাজ করেন, আপনি একটি "স্ক্রিপ্টিং বিকল্প" বিভাগে পাবেন। "উন্নত" ক্লিক করুন এবং পপ আপ তালিকাতে যেখানে এটি "স্ক্রিপ্টের ডেটা প্রকারের" বলে থাকে, আপনার কাছে ডেটা এবং / অথবা স্কিমা নির্বাচন করার বিকল্প আছে।



শুধু শেয়ার করার জন্য, আমি এটা করার জন্য আমার নিজস্ব স্ক্রিপ্ট বিকাশ করেছি। এটি ব্যবহার করতে বিনা দ্বিধায়। এটি "নির্বাচন করুন" বিবৃতি তৈরি করে যা আপনি "INSERT" বিবৃতিগুলি তৈরি করতে টেবিলগুলিতে চালাতে পারেন।

select distinct 'SELECT ''INSERT INTO ' + schema_name(ta.schema_id) + '.' + so.name + ' (' + substring(o.list, 1, len(o.list)-1) + ') VALUES ('
+ substring(val.list, 1, len(val.list)-1) + ');''  FROM ' + schema_name(ta.schema_id) + '.' + so.name + ';'
from    sys.objects so
join sys.tables ta on ta.object_id=so.object_id
cross apply
(SELECT '  ' +column_name + ', ' 
 from information_schema.columns c
 join syscolumns co on co.name=c.COLUMN_NAME and object_name(co.id)=so.name and OBJECT_NAME(co.id)=c.TABLE_NAME and co.id=so.object_id and c.TABLE_SCHEMA=SCHEMA_NAME(so.schema_id)
 where table_name = so.name
 order by ordinal_position
FOR XML PATH('')) o (list)
cross apply
(SELECT '''+' +case 
         when data_type = 'uniqueidentifier' THEN 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+CONVERT(NVARCHAR(MAX),[' + COLUMN_NAME + '])+'''''''' END ' 
         WHEN data_type = 'timestamp' then '''''''''+CONVERT(NVARCHAR(MAX),CONVERT(BINARY(8),[' + COLUMN_NAME + ']),1)+''''''''' 
         WHEN data_type = 'nvarchar' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+REPLACE([' + COLUMN_NAME + '],'''''''','''''''''''')+'''''''' END'
         WHEN data_type = 'varchar' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+REPLACE([' + COLUMN_NAME + '],'''''''','''''''''''')+'''''''' END'
         WHEN data_type = 'char' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+REPLACE([' + COLUMN_NAME + '],'''''''','''''''''''')+'''''''' END'
         WHEN data_type = 'nchar' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+REPLACE([' + COLUMN_NAME + '],'''''''','''''''''''')+'''''''' END'
         when DATA_TYPE='datetime' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+CONVERT(NVARCHAR(MAX),[' + COLUMN_NAME + '],121)+'''''''' END '
         when DATA_TYPE='datetime2' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+CONVERT(NVARCHAR(MAX),[' + COLUMN_NAME + '],121)+'''''''' END '
         when DATA_TYPE='geography' and column_name<>'Shape' then 'ST_GeomFromText(''POINT('+column_name+'.Lat '+column_name+'.Long)'') '
         when DATA_TYPE='geography' and column_name='Shape' then '''''''''+CONVERT(NVARCHAR(MAX),[' + COLUMN_NAME + '])+'''''''''
         when DATA_TYPE='bit' then '''''''''+CONVERT(NVARCHAR(MAX),[' + COLUMN_NAME + '])+'''''''''
         when DATA_TYPE='xml' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+REPLACE(CONVERT(NVARCHAR(MAX),[' + COLUMN_NAME + ']),'''''''','''''''''''')+'''''''' END '
         WHEN DATA_TYPE='image' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+CONVERT(NVARCHAR(MAX),CONVERT(VARBINARY(MAX),[' + COLUMN_NAME + ']),1)+'''''''' END '
         WHEN DATA_TYPE='varbinary' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+CONVERT(NVARCHAR(MAX),[' + COLUMN_NAME + '],1)+'''''''' END '
         WHEN DATA_TYPE='binary' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+CONVERT(NVARCHAR(MAX),[' + COLUMN_NAME + '],1)+'''''''' END '
         when DATA_TYPE='time' then 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE ''''''''+CONVERT(NVARCHAR(MAX),[' + COLUMN_NAME + '])+'''''''' END '
         ELSE 'CASE WHEN [' + column_name+'] IS NULL THEN ''NULL'' ELSE CONVERT(NVARCHAR(MAX),['+column_name+']) END' end
   + '+'', '  
 from information_schema.columns c
 join syscolumns co on co.name=c.COLUMN_NAME and object_name(co.id)=so.name and OBJECT_NAME(co.id)=c.TABLE_NAME and co.id=so.object_id and c.TABLE_SCHEMA=SCHEMA_NAME(so.schema_id)
 where table_name = so.name
 order by ordinal_position
FOR XML PATH('')) val (list)
where   so.type = 'U'






ssms