புள்ளிவலை

மூளைக்குத் தீனியில்லாத போழ்து
சிறிது மனதுக்கும் ஈயப்படும்.
posts - 23, comments - 60, trackbacks - 0

ஸ்டோர்ட் ப்ரோசிஜர் டெம்ப்ளேட்

ஒரு டேபிளிலுள்ள தகவலை இற்றைப்படுத்தவும், புதுத்தகவலை உள்ளிடவும் எஸ்க்யூஎல் சர்வரில் ஸ்டோர்ட் ப்ரோசீஜர் எழுதும்போது டேபிளில் உள்ள காலம்களுக்குத் தகுந்தவாறு நிறைய காரணிகளை வரையறுக்க வேண்டியிருக்கும்.

தூய தமிழில் சொல்வதென்றால், ஸ்டோர்ட் ப்ரோசீஜரில் இன்ஸர்ட்/அப்டேட் ஸ்டேட்மெண்ட்டில் பயன்படுத்த, நிறைய பாராமீட்டர்களை தட்டச்சடிக்க வேண்டியிருக்கும். டேபிள் மிகவும் பெரியதாக, அதிகமான காலம்கள் கொண்டதாக இருந்தால் இதற்கு நிறைய நேரமெடுக்கும். அதனால், ஒரு சிறு உதவிசெயல்நிரலை முயற்சித்தேன். இந்த நிரலிலுள்ள தகவல்தளத்தின் பெயரையும், டேபிளின் பெயரையும் தேவைக்கேற்ப மாற்றி F5 தட்டவும். CREATE PROCEDURE, INSERT, UPDATE statements எல்லாம் போட்டு ஓரளவிற்கு வேலையைக்குறைக்கும் ஸ்டோர்ட் ப்ரோசிஜர் டெம்ப்ளேட் கிடைக்கும்.

என்ன கொடுமை சரவணா இது. மேனேஜ்மெண்ட் ஸ்டூடியோவில் மெசேஜ் விண்டோ யூனிகோடுக்கு இசைவானதாக இல்லை!!! அதனால் எழுத்துக்கூட்டி, ஆங்கிலத்திலேயே வேலிடேஷன் பிழைச்செய்திகள்:

   1: USE  தகவல்தளம் ;
   2:  
   3: declare @tablename varchar(255)
   4: set @tablename = 'test'
   5:  
   6: declare @proceed varchar(20)
   7:  
   8:  
   9: select @proceed = object_id(@tablename)
  10:  
  11: select @proceed = [type] from sys.objects where name = @tablename
  12:  
  13: if @proceed is null
  14: BEGIN
  15:     print 'Table "' + @tablename + '" does not exist in this database. '
  16:     + char(13) + 'Please try changing the database name in the USE statement or
  17:     try correcting the table name.'
  18:     return
  19: END
  20:  
  21: if not @proceed = 'U'
  22: BEGIN
  23:     print 'Object "' + @tablename + '" is not a table...'
  24:     return
  25: END
  26:  
  27: declare @structure table
  28: (
  29: colname varchar(1000),
  30: coltype varchar(50),
  31: colsize int
  32: )
  33:  
  34: insert into @structure
  35: select sys.columns.name, sys.types.name, sys.columns.max_length
  36: from sys.columns left join sys.types
  37: on sys.columns.system_type_id = sys.types.system_type_id
  38: where object_id = object_id(@tablename)
  39:  
  40:  
  41: declare @declaration varchar(8000)
  42: set @declaration = ''
  43: select @declaration = @declaration + char(13) + '@' + colname
  44: + ' ' + coltype + '(' +
  45: convert(varchar(20) , colsize) + '),'
  46: from @structure
  47:  
  48: --Build Insert statement
  49: declare @statement varchar(8000)
  50:  
  51: set @statement = ''
  52:  
  53: select @statement = @statement + char(13)
  54:  
  55: SELECT @STATEMENT = @statement + 'INSERT INTO ' + @tablename + ' ('
  56:  
  57: SELECT @STATEMENT = @statement + char(13) + colname + ',' from @structure
  58:  
  59: SELECT @STATEMENT = @STATEMENT + ')'
  60:  
  61: select @statement = replace(@statement, ',)', ')')
  62:  
  63: select @statement = @statement + ' values('
  64:  
  65:  
  66:  
  67: SELECT @STATEMENT = @STATEMENT + char(13) + '@' + colname + ',' from @structure
  68:  
  69: select @statement = @statement + ')'
  70:  
  71: select @statement = replace(@statement, ',)', ')')
  72:  
  73:  
  74: select @declaration = substring(@declaration, 1, len(@declaration)-1)
  75:  
  76: print 'CREATE PROCEDURE dbo.PROC1 ' + char(13) + '(' + char(13) +  @declaration
  77: + char(13) + ')' + char(13) + 'AS' + char(13)
  78:  
  79: print char(13)
  80: print @statement
  81:  
  82: --Update
  83: declare @updatestatement varchar(3000)
  84:  
  85: set @updatestatement = 'UPDATE ' + @tablename + ' SET '
  86:  
  87: select @updatestatement  = @updatestatement  + char(13) + ' ' + colname +
  88:     ' = @' + colname + ',' from @structure
  89:  
  90: select @updatestatement = @updatestatement + ')'
  91:  
  92: select @updatestatement = replace(@updatestatement, ',)', char(13) + ' WHERE 1=2')
  93:  
  94: print char(13)
  95:  
  96: print @updatestatement

Print | posted on Wednesday, December 09, 2009 6:45 PM | Filed Under [ தகவல் தளம் ]

Feedback

Gravatar

# re: ஸ்டோர்ட் ப்ரோசிஜர் டெம்ப்ளேட்

அருமையான பதிவு நீண்ட நாட்களுக்கு பிறகு
12/12/2009 8:29 AM | Gnana Prakash
Gravatar

# re: ஸ்டோர்ட் ப்ரோசிஜர் டெம்ப்ளேட்

You can do the same using SQL Server Object Explorer, context menu.

Right click on the table name & you can generate script for INSERT / UPDATE / DELETE statements.

இது போன்ற பதிவுகள் தமிழில் வருவது வரவேற்க்கத்தக்கது. ஆங்கில சொற்களை ஆங்கிலத்திலே தட்டச்சு செய்தால் படிப்பதற்கு எளிமையாக இருக்கும் என்பது என் கருத்து.
12/13/2009 10:19 AM | குரு
Gravatar

# re: ஸ்டோர்ட் ப்ரோசிஜர் டெம்ப்ளேட்

ப்ரகாஷ், நன்னி நன்னி. எங்க உன் blogல ஒன்னும் எண்ட்ரியே காணும்?

குரு, right click பண்ணி வரும் insert/update script பாராமீட்டருடன் வருவதில்லை அல்லவா? column namesஉடன் டேட்டாடைப்பும் இணைந்தே வருவதால், அனைத்தையும் நீக்குவது சற்று அதிக்கப்படியான வேலையாக இருக்கிறதே...

ஆங்கிலத்தில் தட்டச்சடிப்பதைப் பற்றி இருதலைக்கொல்லி எறும்பாக இருக்கிறேன். எனக்கும் அதுதான் இலகுவானது. முன்னொருவர் ஆங்கிலச்சொற்களைத் தமிழிலேயே தட்டச்சடித்த்தால் படிப்பதில் தடையில்லாமல் இருக்கும் என்று சொன்னார்.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 3 and 6 and type the answer here:

Powered by: