Generating script in SQL server taking too long I am making backup for my tables in the database and I am generating scripts (from task) in SQL Server Management Studio.

There's about 30-40 tables that I am interested to backup including constraint,indexes, etc. I'm not doing a full backup. There's like 300 tables in the database. The entire database is so big and doing a full backup would take way too long, hence only backup certain tables.

However, in "Save or Publish script" screen, it's stuck there for very long claiming the tables are "preparing". Is there any solution to this?

Is it normal to wait that long? (1 hour)
An alternative to scripting objects using SSMS is to use Powershell.  

Open a Windows command prompt and fire up Powershell

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null

#The SQL Server instance to want to connect to - This is the default instance on my computer
$server = New-Object Microsoft.SqlServer.Management.Smo.Server(".");

#The database you want to script objects from
$database = $server.Databases["Test"];

#Instantiating the Powershell Scripter object 
#so we can easily define how we want to script the object
$scripter = new-object Microsoft.SqlServer.Management.Smo.Scripter($server);

#Do we want Batch Terminators in the script? (GO statements)
$scripter.options.ScriptBatchTerminator = $true

#Where do we want to store file containing the scripted objects?
$scripter.options.FileName = "C:\Scripts\ScriptedTables.sql"

#Don't display the objects we're scripting, just output them to the file
$scripter.options.ToFileOnly = $true

#Script any permissions defined on the objects
$scripter.options.Permissions = $true

#Script all Dri objects 
#For more innformation about DriAll - (https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.scriptingoptions_properties.aspx)
$scripter.options.DriAll = $true

#Script table triggers
$scripter.options.Triggers = $true

#Script table indexes
$scripter.options.Indexes = $true

#A comma separated list of the tables you want to script
$table = $database.Tables["account","DateRange","DateDimension"];

#Invoke the scripting method to produce the output script file
$scripter.Script([Microsoft.SqlServer.Management.Smo.SqlSmoObject[]]$table);


For more information about the available Powershell scriping options, check here.