UPDATE table1 SET field1 = (SELECT SUM(field2) FROM table2 AS t2 WHERE t2.field3 = t1.field3) FROM table1 AS t1
orUPDATE table1 SET field1 = (SELECT SUM(t2.field2) FROM TABLE2 t2 WHERE t2.field3 = field2)
update item_master set mf_item_number = (some value) from group_master as gm join Manufacturar_Master as mm ON ........ where .... (your conditions here)
-----------------------------------UPDATE A SET foo = B.bar FROM TableA A JOIN TableB B ON A.col1 = B.colx WHERE ...
ALTER PROCEDURE testme @input VARCHAR(10),
@output VARCHAR(20) output
AS
BEGIN
IF @input >= '1'
BEGIN
SET @output = 'i am back';
RETURN;
END
END
DECLARE @get VARCHAR(20);
EXEC testme
'1',
@get output
SELECT @get
DECLARE @DBAddress nvarchar(4000),@Address nvarchar(4000),
@Index int
SELECT @DBAddress=[filename]
FROM master.dbo.sysdatabases where name = (select db_name())
SET @Index=CHARINDEX('\DB\',@DBAddress)
SET @Address=SUBSTRING(@DBAddress,1,@Index)
دستور ان به صورت زیر نوشته میشود :
CONVERT(data_type(length),expression,style)
اسکریپت زیر حالت ها مختلف تبدیل تاریخ به رشته را نمایش میدهد
CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),10)
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),6)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)
CONVERT(VARCHAR(10),GETDATE(),11)
خروجی به صورت زیر نمایش داده میشود
Nov 04 2011 11:45 PM
11-04-11
11-04-2011
04 Nov 11
04 Nov 2011
04 Nov 2011 11:45:34:243
14/12/06
این هم جدولی که نوع نمایش میتونید مشخص کنید
Value (century yy) |
Value (century yyyy) |
input/output |
---|---|---|
- | 0 or 100 | mon dd yyyy hh:miAM (or PM) |
1 | 101 | mm/dd/yy |
2 | 102 | yy.mm.dd |
3 | 103 | dd/mm/yy |
4 | 104 | dd.mm.yy |
5 | 105 | dd-mm-yy |
6 | 106 | dd mon yy |
7 | 107 | Mon dd, yy |
8 | 108 | hh:mm:ss |
- | 9 or 109 | mon dd yyyy hh:mi:ss:mmmAM (or PM) |
10 | 110 | mm-dd-yy |
11 | 111 | yy/mm/dd |
12 | 112 | yymmdd |
- | 13 or 113 | dd mon yyyy hh:mi:ss:mmm (24h) |
14 | 114 | hh:mi:ss:mmm (24h) |
- | 20 or 120 | yyyy-mm-dd hh:mi:ss (24h) |
- | 21 or 121 | yyyy-mm-dd hh:mi:ss.mmm (24h) |
- | 126 | yyyy-mm-ddThh:mi:ss.mmm (no spaces) |
- | 130 | dd mon yyyy hh:mi:ss:mmmAM |
- | 131 | dd/mm/yy hh:mi:ss:mmmAM |
CREATE Procedure NewDoreh
@Path_DB varchar(500)
As
Declare @CountDattabase int
Declare @Name_DB nvarchar(50)
Declare @Path_Data_File nvarchar(500)
Declare @Path_Log_File nvarchar(500)
Declare @SysName varchar(10)
Declare @DFName varchar(14)
Declare @LFName varchar(14)
SET @SysName='databasename'
select @CountDattabase=count(name) from master.dbo.sysdatabases where name like '%databasename%'
SET @DFName=@SysName+'_Data'
SET @LFName=@SysName+'_Log'
SET @Name_DB=@SysName+ltrim(rtrim(Str(@CountDattabase+1)))
SET @Path_Data_File=rtrim(@Path_DB)+@Name_DB+'.mdf'
SET @Path_Log_File=rtrim(@Path_DB)+@Name_DB+'.ldf'
Declare @SQL_ Nvarchar(4000)
SET @SQL_= N'
Backup DataBase '+@SysName+ltrim(Str(@CountDattabase))+' To Disk='''+@Path_DB+'Bdatabasename.Bak'''
exec sp_executesql @SQL_
SET @SQL_= N'RESTORE DATABASE '+@Name_DB+' FROM DISK ='''+ @Path_DB+'Bdatabasename.bak'' WITH FILE = 1, NOUNLOAD , STATS = 10, RECOVERY , MOVE '''+@DFName +''' TO '''+@Path_Data_File+''', MOVE '''+@LFName+''' TO '''+ @Path_Log_File+''''
exec sp_executesql @SQL_
select 1
GO
در مثال زیر بزرگترین تاریخ در یک ردیف را پیدا میکند . با توجه به نیاز خود کوئری را تغییر دهید .
که در ان data_table نام جدول مورد نظر ، date1 ، date2 ، date3 نام فیلدها میباشد .
SELECT MAX(date_columns) AS max_date
FROM ( (SELECT date1 AS date_columns
FROM data_table )
UNION
( SELECT date2 AS date_columns
FROM data_table
)
UNION
( SELECT date3 AS date_columns
FROM data_table
(
AS date_query(
و یا
SELECT MAX(MostRecentDate) FROM ( SELECT CASE WHEN date1 >= date2 AND date1 >= date3 THEN date1 WHEN date2 >= date1 AND date2 >= date3 THEN date2 WHEN date3 >= date1 AND date3 >= date2 THEN date3 ELSE date1 END AS MostRecentDate FROM data_table ) AS date_query
create FUNCTION dbo.Num_ToWords (
@Number Numeric (38, 0) -- Input number with as many as 18 digits
) RETURNS VARCHAR(8000)
AS BEGIN
DECLARE @inputNumber VARCHAR(38)
DECLARE @NumbersTable TABLE (number int, word VARCHAR(10))
DECLARE @outputString VARCHAR(8000)
DECLARE @length INT
DECLARE @counter INT
DECLARE @loops INT
DECLARE @position INT
DECLARE @chunk CHAR(3)
DECLARE @tensones CHAR(2)
DECLARE @hundreds CHAR(1)
DECLARE @tens CHAR(1)
DECLARE @ones CHAR(1)
DECLARE @And nvarchar(3)
DECLARE @Neg nvarchar(10)
IF @Number = 0 return 'صفر'
IF Left(@Number ,1) <> '-'
SET @Neg = ' '
ELSE
BEGIN
SET @Neg = 'منفی '
SET @Number = @Number * -1
END
SELECT @inputNumber = CONVERT(varchar(38), @Number)
, @outputString = ''
, @counter = 1
SELECT @length = LEN(@inputNumber)
, @position = LEN(@inputNumber) - 2
, @loops = LEN(@inputNumber)/3
IF LEN(@inputNumber) % 3 <> 0 SET @loops = @loops + 1
INSERT INTO @NumbersTable SELECT 0, ''
UNION ALL SELECT 1, ' یک ' UNION ALL SELECT 2, ' دو '
UNION ALL SELECT 3, ' سه ' UNION ALL SELECT 4, ' چهار '
UNION ALL SELECT 5, ' پنج ' UNION ALL SELECT 6, ' شش '
UNION ALL SELECT 7, ' هفت ' UNION ALL SELECT 8, ' هشت '
UNION ALL SELECT 9, ' نه ' UNION ALL SELECT 10, ' ده '
UNION ALL SELECT 11, ' یازده ' UNION ALL SELECT 12, ' دوازده '
UNION ALL SELECT 13, ' سیزده ' UNION ALL SELECT 14, ' چهارده '
UNION ALL SELECT 15, ' پانزده ' UNION ALL SELECT 16, ' شانزده '
UNION ALL SELECT 17, ' هفده ' UNION ALL SELECT 18, ' هیجده '
UNION ALL SELECT 19, ' نوزده ' UNION ALL SELECT 20, ' بیست '
UNION ALL SELECT 30, ' سی ' UNION ALL SELECT 40, ' چهل '
UNION ALL SELECT 50, ' پنجاه ' UNION ALL SELECT 60, ' شصت '
UNION ALL SELECT 70, ' هفتاد ' UNION ALL SELECT 80, ' هشتاد '
UNION ALL SELECT 90, ' نود ' UNION ALL SELECT 100, ' صد '
UNION ALL SELECT 200, ' دویست ' UNION ALL SELECT 300, ' سیصد '
UNION ALL SELECT 400, ' چهارصد ' UNION ALL SELECT 500, ' پانصد '
UNION ALL SELECT 600, ' ششصد ' UNION ALL SELECT 700, ' هفتصد '
UNION ALL SELECT 800, ' هشتصد ' UNION ALL SELECT 900, ' نهصد '
WHILE @counter <= @loops BEGIN
SET @chunk = RIGHT('000' + SUBSTRING(@inputNumber, @position, 3), 3)
IF @chunk <> '000' BEGIN
SELECT @tensones = SUBSTRING(@chunk, 2, 2)
, @hundreds = SUBSTRING(@chunk, 1, 1)
, @tens = SUBSTRING(@chunk, 2, 1)
, @ones = SUBSTRING(@chunk, 3, 1)
IF CONVERT(INT, @tensones) <= 20 OR @Ones='0' BEGIN
if len(@outputString)>0
begin
set @And='و '
end
else
begin
set @And=''
end
SET @outputString = (SELECT word
FROM @NumbersTable
WHERE @hundreds+'00' = number)
+ case @hundreds when '0' then '' else
case @tensones when '00' then '' else 'و' end end+
(
SELECT word
FROM @NumbersTable
WHERE @tensones = number)
+ CASE @counter WHEN 1 THEN '' -- No name
WHEN 2 THEN ' هزار ' WHEN 3 THEN ' میلیون '
WHEN 4 THEN ' میلیارد ' WHEN 5 THEN ' بیلیون '
WHEN 6 THEN ' بیلیارد ' WHEN 7 THEN ' کوانتیلیون '
WHEN 8 THEN ' سکستیلیون ' WHEN 9 THEN ' سپتیلیون '
WHEN 10 THEN ' اکتیلیون ' WHEN 11 THEN ' نونیلیون '
WHEN 12 THEN ' دسیلیون ' WHEN 13 THEN ' اندسیلیون '
ELSE '' END
+ @And + @outputString
END
ELSE BEGIN
if len(@outputString)>0
begin
set @And='و '
end
else
begin
set @And=''
end
SET @outputString = ' '
+ (SELECT word
FROM @NumbersTable
WHERE @hundreds+'00' = number)
+ case @hundreds when '0' then '' else 'و' end
+ (SELECT word
FROM @NumbersTable
WHERE @tens+'0' = number)
+ 'و'
+ (SELECT word
FROM @NumbersTable
WHERE @ones = number)
+ CASE @counter WHEN 1 THEN '' -- No name
WHEN 2 THEN ' هزار ' WHEN 3 THEN ' میلیون '
WHEN 4 THEN ' میلیارد ' WHEN 5 THEN ' بیلیون '
WHEN 6 THEN ' بیلیارد ' WHEN 7 THEN ' کوانتیلیون '
WHEN 8 THEN ' سکستیلیون ' WHEN 9 THEN ' سپتیلیون '
WHEN 10 THEN ' اکتیلیون ' WHEN 11 THEN ' نونیلیون '
WHEN 12 THEN ' دسیلیون ' WHEN 13 THEN ' اندسیلیون '
ELSE '' END
+ @And + @outputString
END
END
SELECT @counter = @counter + 1
, @position = @position - 3
END
SET @outputString = LTRIM(RTRIM(REPLACE(@outputString, ' ', ' ')))
SET @outputstring = UPPER(LEFT(@outputstring, 1)) + SUBSTRING(@outputstring, 2, 8000)
SET @outputstring = @Neg + @outputstring
RETURN @outputString
END
GO
GRANT EXEC on dbo.Num_ToWords TO PUBLIC
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
تابع date_to_words با سه پارامتر ورودی که سال و ماه و روز را به صورت رشته ای دریافت و یک رشته برمیگرداند . خود کد واضح و نیاز به توضیح نداره . نظر یادتون نشه .
create FUNCTION date_to_words (@year_ as varchar(4),@mon_ as varchar(2),@day_ as varchar(2) ) RETURNS
VARCHAR(100)
as
BEGIN
/*
declare @year_ as varchar(4)
declare @mon_ as varchar(2)
declare @day_ as varchar(2)
set @year_='1390'
set @mon_='01'
set @day_='02'*/
/* Converts date into words */
DECLARE @yr INT
DECLARE @dateval INT
DECLARE @thousand INT
DECLARE @hundred INT
DECLARE @tens INT
DECLARE @mon INT
DECLARE @tensword VARCHAR(10)
DECLARE @onesword VARCHAR(10)
DECLARE @thousandsword VARCHAR(20)
DECLARE @hundredsword VARCHAR(20)
DECLARE @datevalsword VARCHAR(20)
DECLARE @MonWord VARCHAR(20)
SET @yr=cast(@year_ as int)
SET @dateval=cast(@day_ as int)
Set @mon=cast(@mon_ as int)
/* Mon TO WORDS */
SELECT @MonWord =CASE @Mon
WHEN 1 THEN ' فروردین ماه '
WHEN 2 THEN ' اردیبهشت ماه '
WHEN 3 THEN ' خرداد ماه '
WHEN 4 THEN ' تیر ماه '
WHEN 5 THEN ' مرداد ماه '
WHEN 6 THEN ' شهریور ماه '
WHEN 7 THEN ' مهر ماه '
WHEN 8 THEN ' ابان ماه '
WHEN 9 THEN ' اذر ماه '
WHEN 10 THEN ' دی ماه '
WHEN 11 THEN ' بهمن ماه '
WHEN 12 THEN ' اسفند ماه '
END
/* DAY TO WORDS */
SELECT @datevalsword =CASE @dateval
WHEN 1 THEN 'اول'
WHEN 2 THEN 'دوم '
WHEN 3 THEN 'سوم '
WHEN 4 THEN 'چهارم '
WHEN 5 THEN 'پنجم '
WHEN 6 THEN 'ششم '
WHEN 7 THEN 'هفتم '
WHEN 8 THEN 'هشتم '
WHEN 9 THEN 'نهم '
WHEN 10 THEN 'دهم '
WHEN 11 THEN 'یازدهم '
WHEN 12 THEN 'دوازدهم '
WHEN 13 THEN 'سیزدهم '
WHEN 14 THEN 'چهاردهم '
WHEN 15 THEN 'پانزدهم '
WHEN 16 THEN 'شانزدهم '
WHEN 17 THEN 'هفدهم '
WHEN 18 THEN 'هجدهم '
WHEN 19 THEN 'نوزدهم '
WHEN 20 THEN 'بیستم '
WHEN 21 THEN ' بیست و یکم '
WHEN 22 THEN ' بیست و دوم '
WHEN 23 THEN 'بیست و سوم'
WHEN 24 THEN 'بیست و چهارم '
WHEN 25 THEN 'بیست و پنجم '
WHEN 26 THEN 'بیست و ششم '
WHEN 27 THEN 'بیست و هفتم '
WHEN 28 THEN 'بیست و هشتم '
WHEN 29 THEN 'بیست و نهم '
WHEN 30 THEN 'سیم '
WHEN 31 THEN 'سی و یکم '
END
/* YEAR TO WORDS */
set @thousand=floor(@yr/1000)
set @yr = @yr - @thousand * 1000
set @hundred = floor(@yr / 100)
set @yr = @yr - @hundred * 100
IF (@yr > 19)
begin
set @tens = floor(@yr / 10)
set @yr = @yr % 10
end
ELSE
set @tens=0
SELECT @thousandsword=CASE @thousand
WHEN 1 THEN ' یک هزار '
WHEN 2 THEN 'دو هزار'
WHEN 3 THEN 'سه هزار'
WHEN 4 THEN 'چهار هزار'
WHEN 5 THEN 'پنج هزار'
WHEN 6 THEN 'شش هزار'
WHEN 7 THEN 'هفت هزار'
WHEN 8 THEN 'هشت هزار'
WHEN 9 THEN 'نه هزار'
else ''
END
SELECT @hundredsword=CASE @hundred
WHEN 0 then ''
WHEN 1 THEN 'یک صد'
WHEN 2 THEN 'دویست '
WHEN 3 THEN 'سیصد '
WHEN 4 THEN 'چهارصد '
WHEN 5 THEN 'پانصد '
WHEN 6 THEN 'ششصد '
WHEN 7 THEN 'هفتصد '
WHEN 8 THEN 'هشتصد '
WHEN 9 THEN 'نهصد '
else ''
END
if (@hundred<>'')
set @hundredsword=' و '+@hundredsword
/*@tens To WORDS*/
SELECT @tensword=CASE @tens
WHEN 2 THEN 'بیست '
WHEN 3 THEN 'سی '
WHEN 4 THEN 'چهل '
WHEN 5 THEN 'پنجاه '
WHEN 6 THEN 'شصت '
WHEN 7 THEN 'هفتاد '
WHEN 8 THEN 'هشتاد '
WHEN 9 THEN 'نود '
ELSE ''
END
if (@tens<>'')
set @tensword=' و '+@tensword
/*ONES To WORDS*/
SELECT @onesword=CASE @yr
WHEN 0 THEN ''
WHEN 1 THEN 'یک '
WHEN 2 THEN 'دو '
WHEN 3 THEN 'سه '
WHEN 4 THEN 'چهار '
WHEN 5 THEN 'پنج '
WHEN 6 THEN 'شش '
WHEN 7 THEN 'هفت '
WHEN 8 THEN 'هشت '
WHEN 9 THEN 'نه '
WHEN 10 THEN 'ده '
WHEN 11 THEN 'یازده '
WHEN 12 THEN 'دوازده '
WHEN 13 THEN 'سیزده '
WHEN 14 THEN 'چهارده '
WHEN 15 THEN 'پانزده '
WHEN 16 THEN 'شانزده '
WHEN 17 THEN 'هفده '
WHEN 18 THEN 'هجده '
WHEN 19 THEN 'نوزده '
END
if (@yr<>'')
set @onesword=' و '+@onesword
return (@datevalsword+@monWord+@thousandsword+@hundredsword+ @tensword+' '+@onesword)
END
در اینجا یکسری از دستورات sql گذاشتم که در کدنویسی کاربردهای زیادی دارند و من تنها نمونه ای از انها رو اوردم . help نرم افزار sql server اطلاعات بیشتری را در اختیار شما قرار میدهد . به امید انکه مورد استفاده دوستان قرار گیرد .
یافتن نام Instance فعال
SELECT CONVERT(char(20), SERVERPROPERTY('servername')) as Instance Name
یافتن نام سیستم
SELECT CONVERT(char(20), SERVERPROPERTY('MachineName') ) as serverName
SERVERPROPERTY دارای پارامترهای زیادی است که با تغییر ان می توان اطلاعات زیادی به دست اورد .
یافتن نام database
برای پیدا کردن نام database از این دستور می توانید استفاده کنید که ارگمانهای زیادی دارد . information_schema این دستور کاربردهای بیشتری دارد که با جستجوی بیشتر اطلاعات بیشتری پیدا میکنید .
SELECT table_catalog'tablecatalog' FROM information_schema.columns WHERE table_name = 'نام جدول'
یافتن نام فیلدها ، نوع ، سایز و...
SELECT column_name 'Column Name',
data_type 'Data Type',
CHARacter_maximum_length 'Maximum Length'
FROM information_schema.columns
WHERE table_name = 'نام جدول'
فارسی کردن فیلدها
برای این کار می توان از قسمت توضیحات که در زمان طراحی برای هر فیلد وجود دارد استفاده کرد . در این حالت نام فیلدها را به همراه فیلد توضیحات برای شما می اورد .
select a.value,b.name from sysproperties a full Join syscolumns b
on )a.smallid=b.colid) and ( a.id=b.id ) where
b.id in (Select id from sysobjects where name ='نام جدول'(
یافتن refrence های یک جدول
اگر یک جدول به چنیدین جدول دیگر ارتباط داشته باشد برای فهمیدن این موضوع از دستور زیر استفاده کنید .
select * from sysobjects where parent_obj in )select id from sysobjects where name='نام جدول'(
select * from sysreferences where Constid=' ای دی نتیجه قبل را قرار میدهیم در اینجا ' --constid in refrences = id into sysobjects
select * from sysobjects where id=' rkeyid نتیجه قبل را گذاشت در اینجا باید '
برقراری ارتباط بین دو instance
برای این کار در خود sql در قسمت security بر روی Linked Server کلیک راست کرده و گزینه New Linked Server را میزنیم در سربرگ General در مکان Linked Server نام سروری را که می خواهیم به ان متصل شویم را وارد میکنیم و از قسمت Server Type باید Sql Server را انتخاب کنیم و در سربرگ security قسمت Be Made using this security contex را انتخاب و در قسمت Remote login کلمه sa و در قسمت With password کلمه عبور خود را وارد کنید این کار را در هر دو instance انجام دهید . این عمل را با کد زیر نیز می توانید انجام دهید به جای instance name نام instance خود را بگذارید .
USE master
GO
EXEC sp_addlinkedserver
'instance name',
N'SQL Server'
GO
و یا به صورت
USE master
GO
EXEC sp_addlinkedserver
'instance name'
,
'',
'MSDASQL',
NULL,
NULL,
'DRIVER
={SQL Server};SERVER
=MyServer;UID
=sa;PWD
=;'
GO
حالا ازinstance که در ان قرار دارید به instance دیگری که لینک شده اید دسترسی دارید به عنوان مثال :
select * from[instance name].database name .dbo.table name
select * from [server\Test].Anbar.dbo.test2
براقراری ارتباط با اراکل
USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
@server = 'LONDON Mktg',
@srvproduct = 'Oracle',
@provider = 'MSDAORA',
@datasrc = 'MyServer'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
'LONDON Mktg',
'Oracle',
'MSDAORA',
'MyServer'
GO