به منظور اضافه کردن کلید اصلی به view  در اس کیو ال سرور کافی است دستور زیر را را اضافه کنید به ویو خود

ISNULL(ROW_NUMBER() OVER (ORDER BY  column_name  ASC), - 1) AS RowID

 

column_name  نام یکی از ستون های خود را وارد کنید


موضوعات مرتبط: SQL
برچسب ها: کلید اصلی , طراحی ویو , کلید اصلی در ویو

تاريخ : یکشنبه بیست و چهارم اسفند ۱۳۹۹ | | نویسنده : محمدرضا رستمی |

گاهی نیاز است یه خروجی اکسل از سر ستون های یک جدول داشته باشید، برای اینکار کافی است دستور زیر را اجرا کنید

use [نام پایگاه داده]
select name from syscolumns where id=object_id('نام جدول')

موضوعات مرتبط: SQL
برچسب ها: لیست ستون های جدول , سر ستون , sql table columns list

تاريخ : پنجشنبه بیست و نهم آبان ۱۳۹۹ | | نویسنده : محمدرضا رستمی |

برای این کار کافی است در قسمت فرمول فیلد مورد نظر عبارت زیر را تایپ کنید

 

(getdate())


موضوعات مرتبط: SQL
برچسب ها: ذخیره تاریخ در sql , date in sql server

تاريخ : شنبه نوزدهم بهمن ۱۳۹۸ | | نویسنده : محمدرضا رستمی |

برای تبدیل تاریخ شمسی به میلادی در SQL Server  ابتدا فایل زیر را دانلود کنید.

فایل شماره یک

بعد از باز کردن فایل دانلود شده در  SQL Server  نام پایگاه داده خود را در قسمت db_name  نوشته و دستور را یکبار اجرا کنید.

جهت استفاده کافی است از دستوری مشابه دستور زیر استفاده کنید.

select dbo.ShamsitoMiladi('1398/01/01')

 


موضوعات مرتبط: SQL

تاريخ : پنجشنبه هفتم شهریور ۱۳۹۸ | | نویسنده : محمدرضا رستمی |
استفاده از حلقه برای حذف تعدادی ویو

DECLARE @i int = 0
Declare @viewname nvarchar(50)
WHILE @i < 1097
BEGIN


set @viewname='_dta_mv_'+CAST(@i as nvarchar(50))
EXEC('DROP VIEW ' + @viewname)
SET @i = @i + 1
END


موضوعات مرتبط: SQL
برچسب ها: DROP VIEW , حذف ویو , حلقه در sql server

تاريخ : شنبه ششم بهمن ۱۳۹۷ | | نویسنده : محمدرضا رستمی |
به منظور بازگردانی گروهی از  بکاپ های پایگاه داده به صورت یکجا می توانید از نرم افزار زیر استفاده کنید.

You can use the following software to restore a group of database backups.

دانلود - Download


موضوعات مرتبط: برنامه نویسی ، SQL
برچسب ها: SQL SERVER Backup Restore , Group Restore , بازگردانی گروهی بکاپ

تاريخ : پنجشنبه بیستم دی ۱۳۹۷ | | نویسنده : محمدرضا رستمی |

خیلی از برنامه های کاربردی که با بانک های اطلاعاتی کار می کنند نیاز دارند تا تاریخ شمسی را نیز در پایگاه داده اس کیو ال ذخیره کنند ولی بانک اطلاعاتی اس کیو ال تنها تاریخ میلادی را به شما می دهد و برای به دست آوردن تاریخ شمسی باید توابعی را ایجاد کرد تا بتواند تاریخ میلادی را به تاریخ شمسی تبدیل کند.

 

برای این منظور کافی است چهار تایع زیر را بعد از تغییر YourDatabaseName  که در اول تابع است،در اس کیو ال سرور خود اجرا کنید تا 4 تابع برای شما ذخیره شوند. سپس با دستور زیر تاریخ میلادی به شمسی تبدیل می شود.

فایل شماره 1

فایل شماره 2

فایل شماره 3

فایل شماره 4

 

نحوه تبدیل :

select dbo.GregorianToPersian('1980/01/01')

با دستور زیر هم میتونید تاریخ روز  جاری را دریافت کنید

 

select REPLACE(dbo.GregorianToPersian(CONVERT (date, SYSDATETIMEOFFSET()) ),'-','/')

 

نکته ( جدید ): در صورتی که بخواهید در فرمول سیستم نیز به صورت خودکار با درج یک ردیف تاریخ نیز به صورت خودکار ذخیره شود کافی است در قسمت فرمول فیلد مورد نظر کد زیر را قرار دهید

REPLACE(dbo.GregorianToPersian(CONVERT (date, SYSDATETIMEOFFSET()) ),'-','/')


موضوعات مرتبط: SQL
برچسب ها: SQL Server , اس کیو ال

تاريخ : شنبه هشتم اردیبهشت ۱۳۹۷ | | نویسنده : محمدرضا رستمی |

گاهی می خواهید خیلی ساده یک ردیف به خروجی دستو SQL شما اضافه شود بنابر این داریم

ROW_NUMBER() over ( order by mycolumn) as row

mycolumn row
A 1
A 2
B 3
B 4
C 5

 

 

گاهی می خواهید شمارنده تنها برای گروه افزایش یابد در این صورت داریم:

ROW_NUMBER() over (PARTITION by uniq_code order by mycolumn) as row

 

mycolumn row
A 1
A 2
B 1
B 2
C 1

 

گاهی می خواهید ردیف بر اساس گروه های مختلف افزایش یابد در این صورت داریم

DENSE_RANK() over (order by mycolumn) as row

mycolumn row
A 1
A 1
B 2
B 2
C 3

موضوعات مرتبط: SQL
برچسب ها: شمارنده در sql , ردیف در sql

تاريخ : سه شنبه بیست و چهارم مرداد ۱۳۹۶ | | نویسنده : محمدرضا رستمی |
به منظور رفع این مشکل باید فضای درایوی که فایل پایگاه داده بر روی آن قرار دارد را افزایش دهید، ولی اگر انجام این کار به هر دلیلی امکان پذیر نیست می توانید از درستور های زیر استفاده کنید، به این ترتیب به صورت که

 

ALTER DATABASE Database_Name 
SET RECOVERY SIMPLE; 
GO 

Use BiztalkMsgBoxDb 
GO 
DBCC SHRINKFILE (Database_Name_log, 1); 
GO 

ALTER DATABASE Database_Name
SET RECOVERY FULL 
GO

 

* عدد 1 به معنای 1 مگ می باشد


موضوعات مرتبط: SQL
برچسب ها: sql , کاهش حجم ریکاوری

تاريخ : دوشنبه یکم خرداد ۱۳۹۶ | | نویسنده : محمدرضا رستمی |
با استفاده از دستور زیر می توانید از همه پایگاه داده های SQL Server نسخه پشتیبان تهیه کنید.

 

DECLARE @name VARCHAR(50) -- database name 

DECLARE @path VARCHAR(256) -- path for backup files 

DECLARE @fileName VARCHAR(256) -- filename for backup 

DECLARE @fileDate VARCHAR(20) -- used for file name

 

 

-- specify database backup directory

SET @path = 'E:\Mousavi\back_up\rostami\' 

 

 

-- specify filename format

SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)

 

 

DECLARE db_cursor CURSOR FOR 

SELECT name

FROM master.dbo.sysdatabases

WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases

 

 

OPEN db_cursor  

FETCH NEXT FROM db_cursor INTO @name  

 

 

WHILE @@FETCH_STATUS = 0  

BEGIN  

       SET @fileName = @path + @name + '_' + @fileDate + '.BAK' 

       BACKUP DATABASE @name TO DISK = @fileName 

 

 

       FETCH NEXT FROM db_cursor INTO @name  

END  

 

 

CLOSE db_cursor  

DEALLOCATE db_cursor


موضوعات مرتبط: SQL
برچسب ها: sql , Backup , نسخه پشتیبان

تاريخ : چهارشنبه بیست و هفتم اردیبهشت ۱۳۹۶ | | نویسنده : محمدرضا رستمی |
به منظور از بین بردن بخش انتهایی یک جمله در SQL Servcer  می توانید از دستور زیر استفاده کنید.

 

SELECT  SUBSTRING(Column_Name, 0, CHARINDEX('Search Word', Column_Name)) AS Expr1
FROM constant

به این ترتیب تمام جمله تا ابتدای  Search Word در نتیجه دیده می شود. 


موضوعات مرتبط: SQL
برچسب ها: CHARINDEX , sql

تاريخ : پنجشنبه بیست و یکم اردیبهشت ۱۳۹۶ | | نویسنده : محمدرضا رستمی |
به منظور به دست آوردن اختلاف دو ساعت یا به صورت کلی دو زمان مختلف در SQLServer  می توان از کد زیر استفاده کرد.

select DATEDIFF(MINUTE,'10:00','12:00')

نتیجه:120

می توان واحد اختلاف را ساعت،دقیقه و یا ثانیه در نظر گرفت.

همچنین بدیهی است به جای اعداد ثابت بالا کافی است نام فیلد را قرار دهید.

select DATEDIFF(MINUTE,Start_Time,End_Time) from TableName


موضوعات مرتبط: SQL
برچسب ها: اختلاف زمان , اختلاف ساعت

تاريخ : یکشنبه بیستم فروردین ۱۳۹۶ | | نویسنده : محمدرضا رستمی |

با سه دستور زیر به راحنی می توانید یک کاربر SQL SERVER  با دسترسی کامل را ایجاد کنید.

CREATE LOGIN [user_name] WITH PASSWORD = 'password';
EXEC sp_addsrvrolemember 'user_name', 'sysadmin';
GRANT CONTROL SERVER TO [user_name]


موضوعات مرتبط: SQL
برچسب ها: sql , کاربر sql , ایجاد کاربر

تاريخ : یکشنبه هفدهم بهمن ۱۳۹۵ | | نویسنده : محمدرضا رستمی |
گاهی شما نیاز دارید اعداد را دقیقا فارسی یا دقیقا انگلیسی در پایگاه داده SQL ذخیره کنید.

باید دقت هم داشته باشید که در SQL بین اعداد فارسی و لاتین تفاوت است و فرمت اعداد در  دستورات اس کیو ال باید دقیقا به گونه ای باشد که اعداد در پایگاه داده ذخیره شده اند.

برای این منظور می توانید از ابزار قدرتمند persia.net  استفاده کنید.

منبع : persiadevelopers


موضوعات مرتبط: SQL
برچسب ها: اعداد فارسی , اس کیو ال

تاريخ : دوشنبه سیزدهم دی ۱۳۹۵ | | نویسنده : محمدرضا رستمی |

با دنبال کردن مراحل زیر به سادگی می توانید 2 بانک اطلاعاتی در 2 سرور مختلف را به هم لینک کنید و از جدول های آنها در کنار هم استفاده کنید. حتی کار هایی چون  join  و غیره را نیز به سادگی انجام دهید.

ابتدا وارد سرور sql  شوید.

مسیر زیر را دنبال کنید

از object explorer گزینه Server Object را انتخاب کنید و از زیر مجموعه ی آن روی گزینه linked servers راست کلیک کنید و گزینه new linked server را انتخاب کنید. در فرم باز شده طبق تصویر زیر عمل کنید.

 سپس تب security  را انتخاب کنید و نام کاربر و رمز عبور اس کیو الی را که می خواهیم به آن وصل شویم طبق شکل زیر وارد کنید.

 در این مرحله نیز به منظور دسترسی به داده ها و ... تنظیمات را مشابه زیر انجام دهید


موضوعات مرتبط: SQL
برچسب ها: اس کیو ال , سرور مجزا

تاريخ : چهارشنبه بیست و چهارم آذر ۱۳۹۵ | | نویسنده : محمدرضا رستمی |
با اجرای کد زیر می توانید این کار را انجام دهید

USE master;
SELECT B.name AS Database_Name,
   ISNULL(STR(ABS(DATEDIFF(day, GetDate(),
   MAX(Backup_finish_date)))), 'NEVER') AS DaysSinceLastBackup,
   ISNULL(CONVERT(char(10), MAX(backup_finish_date), 101), 'NEVER') AS
   LastBackupDate
FROM   master.dbo.sysdatabases B
LEFT OUTER JOIN   msdb.dbo.backupset A
ON   A.database_name = B.name
AND   A.type = 'D'
GROUP BY
   B.Name
ORDER BY
   B.name

موضوعات مرتبط: SQL
برچسب ها: تاریخ تهیه آخرین نسخه پشتیبان , sql server

تاريخ : دوشنبه هفدهم آبان ۱۳۹۵ | | نویسنده : محمدرضا رستمی |
بدیهی است که بهترین راه حل این مشکل، جلوگیری از به وجود آمدن آن است. یعنی از همان ابتدا بعد از نصب ویندوز، باید کیبورد استاندارد فارسی را نصب کرد.

حالا که نکردیم، یکی از راه حل هایی که خوب جواب میدهد، تبدیل نوع داده ای تو sql  هست.

در واقع اگر نوع داده ای را ntext یا nvarchar گرفتید، فقط کافیه به نوع داده ای text  و یا varchar تبدیلش کنید. اینطوری مشکل حل می شه.

نکته مهم : قبل از هر تغییری روی پایگاه داده حتما یک نسخه پشتبیان تهیه کنید.

 


موضوعات مرتبط: SQL
برچسب ها: ی فارسی و عربی , حروف عربی در sql

تاريخ : چهارشنبه دوازدهم آبان ۱۳۹۵ | | نویسنده : محمدرضا رستمی |
گاهی نیاز است علاوه بر حالت برنامه نویسی در سمت پایگاه داده نیز از منفی شده مقدار یک ستون جلوگیری کنید.برای این منظور دستور کافی است دستور زیر را بر روی نام ستون اجرا کنید.
 
ALTER TABLE Table_name ADD CONSTRAINT Const_Name CHECK (Field_Name >= 0);
 
  
در دستور بالا نام جدول خود و  نامی دلخواه برای  شرط و نام فیلد خود را باید وارد کنید. سپس بعد از اجرای دستور در قسمت CONSTRAINT جدول مربوطه شرط مورد نظر اضافه شده به منظور حذف یا تغییر شرط می توانید به CONSTRAINT جدول مورد نظر مراجعه کنید. 

موضوعات مرتبط: SQL

تاريخ : پنجشنبه بیست و دوم مهر ۱۳۹۵ | | نویسنده : محمدرضا رستمی |

موضوعات مرتبط: SQL
برچسب ها: sql , ایجاد کاربری

تاريخ : یکشنبه چهارم مهر ۱۳۹۵ | | نویسنده : محمدرضا رستمی |
گاهی به هر دلیلی مانند طراحی اشتباه یا ... ممکن است مجبور شوید یک متغیر یا نام یک جدول را در همه جای بانک اطلاعاتی عوض کنید، برای این کار می توانید از ابزار حرفه ای و پر کاربرد زیر استفاده کنید.

برای دانلود نرم افزار جستجو گر SQL می توانید اینجا کلیک کنید


موضوعات مرتبط: SQL
برچسب ها: sql serach , جستجو گر sql

تاريخ : سه شنبه دوازدهم مرداد ۱۳۹۵ | | نویسنده : محمدرضا رستمی |
برای ذخیره داده های خروجی یک دستور sql  باید دستور را به شکل زیر بنویسیم


موضوعات مرتبط: SQL
برچسب ها: sql , ذخیره خروجی جدول

تاريخ : دوشنبه یازدهم مرداد ۱۳۹۵ | | نویسنده : محمدرضا رستمی |
در صورتی که می خواهید یک رشته را در sql  تکه تکه یا Split کنید، می توانید به راحتی از کد زیر استفاده کنید

SELECT PARSENAME(REPLACE('1395/01/02', '/', '.'),3)

 

 PARSENAME بر اساس نقطه جدا می کند، پس کافی است کاراکتر مورد نظر را با نقطه جایگزین کنید و با صدا زدن ایندکس آن، مقدار مورد نظر را به دست آورید.

موضوعات مرتبط: SQL
برچسب ها: تکه تکه کردن , split , sql

تاريخ : یکشنبه سیزدهم تیر ۱۳۹۵ | | نویسنده : محمدرضا رستمی |