הופתעתי היום לגלות שיש דבר כזה, והייתי בוודאי עושה מזה מזמן שימוש נאות לו ידעתי: Sysname הוא משתנה מסוג (Nvarchar(128 שנועד לשמור שמות של אובייקטים שונים ב-SQL Server (שמות טבלאות, שמות עמודות, שמות אינדקסים..) שכולם מוגבלים בגודלם ל-128 תווים; ויתרונו בכך שאם המגבלה תשתנה בגרסאות עתידיות – גם הוא ישתנה..
עד כה הייתי שומר את שמות האובייקטים בעמודות Varchar בגדלים שונים כיד הדמיון הטובה עלי באותו זמן (בד"כ 50 או Max..).
נתפוס כמה וכמה ציפורים ביד אחת: בעזרת SQL דינאמי (כדי לחסוך הקלדת רצף של 128 תווים) ניצור טבלה,
לטבלה יהיה כמובן שדה Sysname שלתוכו נכניס את שמות כל האובייקטים מ-sys.objects שאורכם 128 תווים (זה יכלול את הטבלה שלנו, אובייקטים של המערכת, וגם טבלאות זמניות – אם יש),
נשלוף את הנתונים מהטבלה,
ונבצע לה Drop:
Declare @SQL Varchar(Max),
@Ln Int;
Set @Ln=128;
Set @SQL='Create Table '+Replicate('T',@Ln)+'(S Sysname);';
Print @SQL;
Exec(@SQL);
Set @SQL='Insert Into '+Replicate('T',@Ln)+' Select name From sys.objects Where Len(name)='+Cast(@Ln As Varchar)+';';
Print @SQL;
Exec(@SQL);
Set @SQL='Select * From '+Replicate('T',@Ln)+';';
Print @SQL;
Exec(@SQL);
Set @SQL='Drop Table '+Replicate('T',@Ln)+';';
Print @SQL;
Exec(@SQL);
אפשר לשנות את ערכו של Ln@ למספר אחר (למשל- 129) כדי להשתכנע שזה לא עובד..