declare @body varchar(max) set @body = cast( ( select td = dbtable + '' + cast( entities as varchar(30) ) + ' ' + cast( rows as varchar(30) )
from (
select dbtable = object_name( object_id ),
entities = count( distinct name ),
rows = count( * )
from sys.columns
group by object_name( object_id )
) as d
for xml path( 'tr' ), type ) as varchar(max) )
set @body = '' + '
'' + replace( replace( @body, '<', '<' ), '>', '>' ) + ' Database Table Entity Count Total Rows
print @body
<html> <head > </head> <body> <body> <html>
http://stackoverflow.com/questions/7070053/convert-a-sql-query-result-table-to-an-html-table-for-emailSQL Cast and Convert Date
Using SQL Server 2008
This first option of removing the date uses the SQL Server 2008 method. This will return only the date or only the time:
-- remove the time
SELECT CAST(GETDATE() AS DATE) -- 2009-07-12
-- remove the date
SELECT CAST(GETDATE() AS TIME) -- 08:46:25.8130000
If you’re not working with SQL Server 2008, you have to improvise.
Cast Date With No Time Using Floor
This example removes the time from the date time by setting it to the beginning of the day.
-- Get the current day with no time
-- 2009-06-29 00:00:00.000
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS datetime)
-- Get the next day
-- 2009-06-30 00:00:00.000
SELECT CAST(CEILING (CAST(GETDATE() AS FLOAT)) AS datetime)
Cast Date with No Time Using Convert
Using convert you can remove the time for display purposes, usually for reporting or the front end.
-- Month first
SELECT CONVERT(VARCHAR(12),GETDATE(), 101) -- 06/29/2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 110) -- 06-29-2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 100) -- Jun 29 2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 107) -- Jun 29, 2009
-- Year first
SELECT CONVERT(VARCHAR(12),GETDATE(), 102) -- 2009.06.29
SELECT CONVERT(VARCHAR(12),GETDATE(), 111) -- 2009/06/29
SELECT CONVERT(VARCHAR(12),GETDATE(), 112) -- 20090629
-- Day first
SELECT CONVERT(VARCHAR(12),GETDATE(), 103) -- 29/06/2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 105) -- 29-06-2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 104) -- 29.06.2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 106) -- 29 Jun 2009
-- Time only
SELECT CONVERT(VARCHAR(12),GETDATE(), 108) -- 07:26:16
SELECT CONVERT(VARCHAR(12),GETDATE(), 114) -- 07:27:11:203
Roll Your Own Date
To roll your own date format, use the datename function. This is also the only way to get the full month name.
SELECT DATENAME(MONTH, GETDATE()) -- June
SELECT DATENAME(DAY,GETDATE()) -- 29
SELECT DATENAME(YEAR, GETDATE()) -- 2009
-- Concatente values
-- June.29.2009
SELECT DATENAME(MONTH, GETDATE()) + '.' + DATENAME(DAY,GETDATE()) + '.' + DATENAME(YEAR, GETDATE())
Here are the rest of the possible datepart intervals:
Date Part Name Interval Values
Year year, yyyy, yy
Quarter quarter, q, qq
Month month, mm, mm
Day of the year dayofyear, dy, y
Day day, dd,. D
Weekday weekday, dw
Week week, wk, ww
Hour hour, hh
Minute minute, mi, n
Second second, ss, s
http://sqlserverplanet.com/tsql/cast-dateThursday, August 16, 2012
Select เฉพาะวันที่ใน SQL Server
SELECT DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))
I approved his method though, I finally suggested my method using function CONVERT.
SELECT CONVERT(VARCHAR(10),GETDATE(),111)
http://blog.sqlauthority.com/2007/06/10/sql-server-retrieve-select-only-date-part-from-datetime-best-practice/Thursday, July 9, 2009
SQL Command for dispaly table on database
SQL Command สำหรับแสดงชื่อตารางทั้งหมดใน DatabaseEXEC sp_tables
ถ้าจะให้แสดงเฉพาะ Table ให้ใช้ Parameter @table_typeEXEC sp_tables @table_type = "'TABLE'"
เรียกใช้ Paremeter ตามลำดับEXEC sp_tables Customers, dbo, Northwind, "'TABLE'"
ผลลัพธ์
หรือใช้ Command นี้SELECT name
FROM sys.tables
ผลลัพธ์
สามารถใช้ Command นี้แสดง Column ของ Table ที่ต้องการได้
ตัวอย่างแสดง Column ของ Table Customers ของ Database NorthwindSELECT name
FROM sys.syscolumns
WHERE (id = OBJECT_ID('Customers'))
ผลลัพธ์![]()
Wednesday, July 8, 2009
Use SQL OPENROWSET OPENDATASOURCE Query Excel
เราสามารถใช้คำสั่ง OPENROWSET OPENDATASOURCE สำหรับ Query ไฟล์ Excel ได้ตามตัวอย่างข้างล่างนี้
ก่อนอื่นถ้ายังไม่เปิดการใช้งาน OPENROWSET OPENDATASOURCE ใน SQL Server 2005 ให้เปิดการใช้งานก่อน ดูวิธีได้ตาม Link นี้
http://usedotnet.blogspot.com/2009/07/sql-server-blocked-access-to-statement.html
ตัวอย่างเป็นการ Query จากไฟล์ C:\Customers.xls ที่ Sheet ชื่อ CustomersSELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\Customers.xls;Extended Properties=Excel 8.0')...[Customers$]
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\Customers.xls', [Customers$])
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\Customers.xls', 'SELECT * FROM [Customers$]')
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\Customers.xls',
'SELECT * FROM [Customers$]')
More Information: http://support.microsoft.com/kb/321686SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource'
ถ้าเกิดปัญหา run query openrowset หรือ opendatasource ไม่ได้เกิด error message ดังนี้
Msg 15281, Level 16, State 1, Line 1
SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', see "Surface Area Configuration" in SQL Server Books Online.
ให้ทำดังนี้
หลังจากนั้นลอง run query openrowset อีกครั้งThursday, June 25, 2009
Using sql to padding a string with leading zeros (0)
วิธีการเพิ่ม 0 เข้าไปหน้าตัวเลขโดยใช้ SQL Stored ProcedureDECLARE @number INT
DECLARE @size_of_fixed_string TINYINT
DECLARE @string VARCHAR(10)
SET @number = 40 --ตัวเลขที่จะ add 0
SET @size_of_fixed_string = 10 --จำนวนหลักที่ต้องการ
PRINT REPLICATE( '0', @size_of_fixed_string )
SET @string = LEFT( REPLICATE( '0', @size_of_fixed_string ),
@size_of_fixed_string - LEN( @number ) ) + CAST( @number AS VARCHAR(10) )
PRINT @string
ผลลัพธ์คือ0000000000
0000000040
หรือSELECT LEFT(REPLICATE('0',4),4-len(1)) + CAST(1 AS VARCHAR(10))
SELECT LEFT(REPLICATE('0',4),4-len(20)) + CAST(20+1 AS VARCHAR(10))
บรรทัดแรกตัวเลขคือ 1 จะใช้จำนวนหลัก 4 หลัก
บรรทัดที่สองตัวเลขคือ 20 + 1 จะใช้ 4 หลักเหมือนกัน ผลลัพธ์คือ0001
0021
Thanks for http://bytes.com/groups/ms-sql/495625-how-can-i-conserve-initial-zero-when-convert-numeric-string-using-str
http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/05/29/765.aspxMonday, September 29, 2008
Run SQL Server 2000 DTS by Stored Procedure
1. “Windows” + “R” พิมพ์ dtsrunui ในช่อง Open แล้วกด OK
2. จะมีหน้าจอตามรูปด้านล่าง ใส่ ip server ในช่อง Server แล้วก็ใส่ Username และ Password ของ Server นั้น หลังจากนั้นกดปุ่ม ... หลังช่อง Package name จะมี list ของ DTS ใน Server นั้นมาให้เราเลือก เลือก DTS ที่ต้องการ แล้วกด OK
3. จากรูปในขั้นตอนที่แล้ว กดปุ่ม Advanced... จะได้หน้าจอตามรูปด้านล่าง กดปุ่ม Generate... จะมี command ขึ้นมาในช่องด้านหน้า ถ้าต้องการ Encrypt command เพื่อไม่ให้เห็น username และ password ให้ติ๊กถูกที่ Encrypt the command แล้วกด Generate อีกรอบ จะได้ command ที่ encrypt ไว้
4. หลังจากนั้นเอา command ที่ได้ มารันเหมือน SQL ปกติตาม code ด้านล่างนี้EXEC master..xp_cmdshell {'command_string'}
http://msdn.microsoft.com/en-us/library/aa260689(SQL.80).aspxThursday, August 21, 2008
SQL Server ROUND FLOOR CEILING function
SELECT ROUND(100.1145,2)
SELECT ROUND(100.1145,3)
GO
SELECT ROUND(123.45,-3), ROUND(123.45,-2), ROUND(123.45,-1), ROUND(123.45,0), ROUND(123.45,1), ROUND(123.45,2)
GO
SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45), FLOOR($-123.45), FLOOR(123.9)
GO
SELECT CEILING(123.45), CEILING(-123.45), CEILING($123.45), CEILING($-123.45), CEILING(123.1)
GO
DECLARE @m MONEY
SET @m = 120.155 --SELECT @m = 120.155
SELECT @m
SELECT CONVERT(VARCHAR,@m)
GOMonday, August 11, 2008
SQL Server Linked Server
Query from link server
for default instance nameSELECT * FROM [LinkServerName].DatabaseName.dbo.TableName
SELECT * FROM OPENQUERY([LinkServerName], 'SELECT * FROM TableName')
for other instance nameSELECT * FROM [LinkServerName\InstanceName].DatabaseName.dbo.TableName
SELECT * FROM OPENQUERY([LinkServerName\InstanceName], 'SELECT * FROM TableName')
other methodSELECT * FROM LinkServerName..UserName.TableNameFriday, August 8, 2008
How to run SQL Server job using ASP.NET C#
Method 1. Using Store Procedure
Comming soon...
http://blog.the-dargans.co.uk/2007/02/executing-job-on-sql-2005-server-in-c.html
http://www.dotnetspider.com/resources/4833-Read-status-SQL-Server-Agent-jobs.aspx
http://www.dotaspx.net/article4.aspx
http://www.sqlteam.com/article/how-to-asynchronously-execute-a-dts-package-from-asp-or-aspnet
http://forums.asp.net/t/1271752.aspx
http://dreamsender.blogspot.com/2008/07/run-job-scheduled-sql-server-aspnet.html
http://www.greatfriends.biz/webboards/msg.asp?b=SURREALIST&id=76368Tuesday, August 5, 2008
How to insert values into an identity column in SQL Server
USE Northwind
GO
IF OBJECT_ID('IdentityTable') IS NOT NULL
DROP TABLE IdentityTable
GO
CREATE TABLE IdentityTable (
TheIdentity INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
TheValue NVARCHAR(20) NOT NULL )
GOINSERT IdentityTable(TheIdentity, TheValue)
VALUES (1, 'First Row')
GO
Server: Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'IdentityTable' when IDENTITY_INSERT is set to OFF.SET IDENTITY_INSERT IdentityTable ON
INSERT IdentityTable(TheIdentity, TheValue)
VALUES (3, 'First Row')
SET IDENTITY_INSERT IdentityTable OFFSET IDENTITY_INSERT IdentityTable ON
INSERT IdentityTable(TheIdentity, TheValue)
VALUES (10, 'Row Ten')
SET IDENTITY_INSERT IdentityTable OFF
INSERT IdentityTable(TheValue)
VALUES ('Should be 11')
SELECT * FROM IdentityTable
GO
Result
---------------------
1 First Row
10 Row Ten
11 Should be 11Show row number in SQL Server and Oracle
SQL Server:USE Northwind
SELECT ROW_NUMBER() OVER (ORDER BY EmployeeID DESC) AS RowID, *
FROM EMPLOYEES ORDER BY FirstName
Show row number in SQL Server 2000, 2005
http://support.microsoft.com/kb/186133
Oracle:SELECT rownum, column_name FROM user_tables
Show row number in Oracle
http://blog.lishman.com/2008/03/rownum.htmlTuesday, July 1, 2008
Friday, June 20, 2008
Single quote in sql
USE Northwind
SELECT CHAR(39)+ CompanyName FROM Customers
SELECT a='Thailand''s', b='Thailand'+'''s'Thursday, June 19, 2008
How to use variable as column Name
USE Northwind
DECLARE @SqlQuery VARCHAR(1000)
DECLARE @ColumnName VARCHAR(100)
DECLARE @TableName VARCHAR(100)
SET @ColumnName = N'Address'
SET @TableName = N'Customers'
SET @SqlQuery = N'SELECT '+ @ColumnName+ ' FROM ' + @TableName
EXEC (@SqlQuery)Friday, June 6, 2008
Error 7405: Heterogeneous queries (SQL Server 2000)
ก่อนคำสั่ง Create Procedure ให้ใส่
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
http://support.microsoft.com/kb/296769Monday, May 26, 2008
Change temporary datetime regional to SQL Server
If my database set to COLLATE Thai_CI_AS. Then, I select datetime format 106, result below
SELECT CONVERT(VARCHAR,GETDATE(),106)
Result: 26 พ.ค. 2008
If I want to select in english format, I must use command this
SET LANGUAGE us_english
SELECT CONVERT(VARCHAR,GETDATE(),106)
Result: 26 May 2008SET LANGUAGE us_english
SELECT CONVERT(VARCHAR,GETDATE(),106)
SET LANGUAGE thai
SELECT CONVERT(VARCHAR,GETDATE(),106)
************************************************************
Case Study:
My problem, I created web application with ASP.NET and the application use datetime in format "dd-MMM-yyyy" for example "16-May-2008"(I set CultureInfo to "en-US" in Global.asax shown below).
void Application_BeginRequest(object sender, EventArgs e)
{
// Code that runs on application startup
System.Globalization.CultureInfo vNewCulture = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = vNewCulture;
}
In test environment I connected the application to SQL Server database(in same IIS). The server set regional language to "en-US". When I query data from database, result is nomally.
Then I migrate database to real database server. In the real database server set regional to Thai "th-TH". When the application query data from database server, I founded error.
I fixed this problem by insert "SET LANGUAGE us_english" at the beginning of query data to all query.
************************************************************
http://mark-dot-net.blogspot.comSubscribe to: Posts (Atom)
Showing posts with label SQL Server. Show all posts
Showing posts with label SQL Server. Show all posts









