Category Archive SQL Server

Cannot connect to \SQLEXPRESS.

เห็นมีถามกันเป็นระยะกับเรื่อง

TITLE: Connect to Server
——————————

Cannot connect to \SQLEXPRESS.

——————————
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

——————————

Database ‘mssqlsystemresource’ is being recovered. Waiting until recovery is finished. (Microsoft SQL Server, Error: 922)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=922&LinkId=20476

——————————
BUTTONS:

OK
——————————

อ่านซะงงจริงๆ แล้วปัญหาคือ service SQLAgent$SQLEXPRESS หรือ SQL Server Agent (SQLEXPRESS) มัน start ไม่สำเหร็จ ที่เจอบ่อยๆคือ MSSQL$SQLEXPRESS หรือ SQL Server (SQLEXPRESS) มัน start ขึ้นมาก่อน วิธีแก้

  • ไปที่ run พิมพ์ services.msc เอ็นเทอร์
  • แล้วเลื่อนไปหา พวก SQL xxx คลิกขวา Stop ให้หมด
  • แล้วคลิก SQL Server Agent (SQLEXPRESS) คลิกขวา start
  • ทดลอง connect ดูใหม่อีกครั้ง น่าจะ connect ได้แล้ว
  • ถ้าใช้เครื่องเป็น web server ด้วย SQL Server Reporting Services (SQLEXPRESS) ก็ให้ stop และเลือก property เปลี่ยน startup type เป็น manual เพราะว่ามันใช้ port 80 เหมือนกับพวกเว็บเซิร์ฟเวอร์ เป็นสาเหตุที่ทำให้ apache start ไม่สำเร็จได้

จริงๆ ถ้า ms ใส่ใจอีกซักหน่อย หรือเขียน error message ให้ดีกว่านี้ซะหน่อยก็คงไม่มีคนเข้ามาถามกันบ่อยๆ

อีกจุดที่ ต้องดูถ้ายัง connect ไม่ได้คือ ไปที่ เมนู > Microsoft SQL Server 20xx > SQL Server Configuration Manager ดูพวก TCP/IP (มีหลายที่) ให้เปลี่ยนเป็น enable แล้ว restart SQL Server Agent ใหม่

Cannot connect to \SQLEXPRESS.

เห็นมีถามกันเป็นระยะกับเรื่อง

TITLE: Connect to Server
——————————
Cannot connect to \SQLEXPRESS.
——————————
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
——————————
Database ‘mssqlsystemresource’ is being recovered. Waiting until recovery is finished. (Microsoft SQL Server, Error: 922)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=922&LinkId=20476
——————————
BUTTONS:
OK
——————————

อ่านซะงงจริงๆ แล้วปัญหาคือ service SQLAgent$SQLEXPRESS หรือ SQL Server Agent (SQLEXPRESS) มัน start ไม่สำเหร็จ ที่เจอบ่อยๆคือ MSSQL$SQLEXPRESS หรือ SQL Server (SQLEXPRESS) มัน start ขึ้นมาก่อน วิธีแก้

  • ไปที่ run พิมพ์ services.msc เอ็นเทอร์
  • แล้วเลื่อนไปหา พวก SQL xxx คลิกขวา Stop ให้หมด
  • แล้วคลิก SQL Server Agent (SQLEXPRESS) คลิกขวา start
  • ทดลอง connect ดูใหม่อีกครั้ง น่าจะ connect ได้แล้ว
  • ถ้าใช้เครื่องเป็น web server ด้วย SQL Server Reporting Services (SQLEXPRESS) ก็ให้ stop และเลือก property เปลี่ยน startup type เป็น manual เพราะว่ามันใช้ port 80 เหมือนกับพวกเว็บเซิร์ฟเวอร์ เป็นสาเหตุที่ทำให้ apache start ไม่สำเร็จได้

จริงๆ ถ้า ms ใส่ใจอีกซักหน่อย หรือเขียน error message ให้ดีกว่านี้ซะหน่อยก็คงไม่มีคนเข้ามาถามกันบ่อยๆ

อีกจุดที่ ต้องดูถ้ายัง connect ไม่ได้คือ ไปที่ เมนู > Microsoft SQL Server 20xx > SQL Server Configuration Manager ดูพวก TCP/IP (มีหลายที่) ให้เปลี่ยนเป็น enable แล้ว restart SQL Server Agent ใหม่

Cannot connect to \SQLEXPRESS.

เห็นมีถามกันเป็นระยะกับเรื่อง

TITLE: Connect to Server
——————————
Cannot connect to \SQLEXPRESS.
——————————
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
——————————
Database ‘mssqlsystemresource’ is being recovered. Waiting until recovery is finished. (Microsoft SQL Server, Error: 922)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=922&LinkId=20476
——————————
BUTTONS:
OK
——————————

อ่านซะงงจริงๆ แล้วปัญหาคือ service SQLAgent$SQLEXPRESS หรือ SQL Server Agent (SQLEXPRESS) มัน start ไม่สำเหร็จ ที่เจอบ่อยๆคือ MSSQL$SQLEXPRESS หรือ SQL Server (SQLEXPRESS) มัน start ขึ้นมาก่อน วิธีแก้

  • ไปที่ run พิมพ์ services.msc เอ็นเทอร์
  • แล้วเลื่อนไปหา พวก SQL xxx คลิกขวา Stop ให้หมด
  • แล้วคลิก SQL Server Agent (SQLEXPRESS) คลิกขวา start
  • ทดลอง connect ดูใหม่อีกครั้ง น่าจะ connect ได้แล้ว
  • ถ้าใช้เครื่องเป็น web server ด้วย SQL Server Reporting Services (SQLEXPRESS) ก็ให้ stop และเลือก property เปลี่ยน startup type เป็น manual เพราะว่ามันใช้ port 80 เหมือนกับพวกเว็บเซิร์ฟเวอร์ เป็นสาเหตุที่ทำให้ apache start ไม่สำเร็จได้

จริงๆ ถ้า ms ใส่ใจอีกซักหน่อย หรือเขียน error message ให้ดีกว่านี้ซะหน่อยก็คงไม่มีคนเข้ามาถามกันบ่อยๆ

อีกจุดที่ ต้องดูถ้ายัง connect ไม่ได้คือ ไปที่ เมนู > Microsoft SQL Server 20xx > SQL Server Configuration Manager ดูพวก TCP/IP (มีหลายที่) ให้เปลี่ยนเป็น enable แล้ว restart SQL Server Agent ใหม่

Cannot connect to \SQLEXPRESS.

เห็นมีถามกันเป็นระยะกับเรื่อง

TITLE: Connect to Server
——————————
Cannot connect to \SQLEXPRESS.
——————————
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
——————————
Database ‘mssqlsystemresource’ is being recovered. Waiting until recovery is finished. (Microsoft SQL Server, Error: 922)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=922&LinkId=20476
——————————
BUTTONS:
OK
——————————

อ่านซะงงจริงๆ แล้วปัญหาคือ service SQLAgent$SQLEXPRESS หรือ SQL Server Agent (SQLEXPRESS) มัน start ไม่สำเหร็จ ที่เจอบ่อยๆคือ MSSQL$SQLEXPRESS หรือ SQL Server (SQLEXPRESS) มัน start ขึ้นมาก่อน วิธีแก้

  • ไปที่ run พิมพ์ services.msc เอ็นเทอร์
  • แล้วเลื่อนไปหา พวก SQL xxx คลิกขวา Stop ให้หมด
  • แล้วคลิก SQL Server Agent (SQLEXPRESS) คลิกขวา start
  • ทดลอง connect ดูใหม่อีกครั้ง น่าจะ connect ได้แล้ว
  • ถ้าใช้เครื่องเป็น web server ด้วย SQL Server Reporting Services (SQLEXPRESS) ก็ให้ stop และเลือก property เปลี่ยน startup type เป็น manual เพราะว่ามันใช้ port 80 เหมือนกับพวกเว็บเซิร์ฟเวอร์ เป็นสาเหตุที่ทำให้ apache start ไม่สำเร็จได้

จริงๆ ถ้า ms ใส่ใจอีกซักหน่อย หรือเขียน error message ให้ดีกว่านี้ซะหน่อยก็คงไม่มีคนเข้ามาถามกันบ่อยๆ

อีกจุดที่ ต้องดูถ้ายัง connect ไม่ได้คือ ไปที่ เมนู > Microsoft SQL Server 20xx > SQL Server Configuration Manager ดูพวก TCP/IP (มีหลายที่) ให้เปลี่ยนเป็น enable แล้ว restart SQL Server Agent ใหม่

Cannot connect to \SQLEXPRESS.

เห็นมีถามกันเป็นระยะกับเรื่อง

TITLE: Connect to Server
——————————
Cannot connect to \SQLEXPRESS.
——————————
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
——————————
Database ‘mssqlsystemresource’ is being recovered. Waiting until recovery is finished. (Microsoft SQL Server, Error: 922)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=922&LinkId=20476
——————————
BUTTONS:
OK
——————————

อ่านซะงงจริงๆ แล้วปัญหาคือ service SQLAgent$SQLEXPRESS หรือ SQL Server Agent (SQLEXPRESS) มัน start ไม่สำเหร็จ ที่เจอบ่อยๆคือ MSSQL$SQLEXPRESS หรือ SQL Server (SQLEXPRESS) มัน start ขึ้นมาก่อน วิธีแก้

  • ไปที่ run พิมพ์ services.msc เอ็นเทอร์
  • แล้วเลื่อนไปหา พวก SQL xxx คลิกขวา Stop ให้หมด
  • แล้วคลิก SQL Server Agent (SQLEXPRESS) คลิกขวา start
  • ทดลอง connect ดูใหม่อีกครั้ง น่าจะ connect ได้แล้ว
  • ถ้าใช้เครื่องเป็น web server ด้วย SQL Server Reporting Services (SQLEXPRESS) ก็ให้ stop และเลือก property เปลี่ยน startup type เป็น manual เพราะว่ามันใช้ port 80 เหมือนกับพวกเว็บเซิร์ฟเวอร์ เป็นสาเหตุที่ทำให้ apache start ไม่สำเร็จได้

จริงๆ ถ้า ms ใส่ใจอีกซักหน่อย หรือเขียน error message ให้ดีกว่านี้ซะหน่อยก็คงไม่มีคนเข้ามาถามกันบ่อยๆ

อีกจุดที่ ต้องดูถ้ายัง connect ไม่ได้คือ ไปที่ เมนู > Microsoft SQL Server 20xx > SQL Server Configuration Manager ดูพวก TCP/IP (มีหลายที่) ให้เปลี่ยนเป็น enable แล้ว restart SQL Server Agent ใหม่

Cannot connect to \SQLEXPRESS.

เห็นมีถามกันเป็นระยะกับเรื่อง

TITLE: Connect to Server
——————————

Cannot connect to \SQLEXPRESS.

——————————
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

——————————

Database ‘mssqlsystemresource’ is being recovered. Waiting until recovery is finished. (Microsoft SQL Server, Error: 922)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=922&LinkId=20476

——————————
BUTTONS:

OK
——————————

อ่านซะงงจริงๆ แล้วปัญหาคือ service SQLAgent$SQLEXPRESS หรือ SQL Server Agent (SQLEXPRESS) มัน start ไม่สำเหร็จ ที่เจอบ่อยๆคือ MSSQL$SQLEXPRESS หรือ SQL Server (SQLEXPRESS) มัน start ขึ้นมาก่อน วิธีแก้

  • ไปที่ run พิมพ์ services.msc เอ็นเทอร์
  • แล้วเลื่อนไปหา พวก SQL xxx คลิกขวา Stop ให้หมด
  • แล้วคลิก SQL Server Agent (SQLEXPRESS) คลิกขวา start
  • ทดลอง connect ดูใหม่อีกครั้ง น่าจะ connect ได้แล้ว
  • ถ้าใช้เครื่องเป็น web server ด้วย SQL Server Reporting Services (SQLEXPRESS) ก็ให้ stop และเลือก property เปลี่ยน startup type เป็น manual เพราะว่ามันใช้ port 80 เหมือนกับพวกเว็บเซิร์ฟเวอร์ เป็นสาเหตุที่ทำให้ apache start ไม่สำเร็จได้

จริงๆ ถ้า ms ใส่ใจอีกซักหน่อย หรือเขียน error message ให้ดีกว่านี้ซะหน่อยก็คงไม่มีคนเข้ามาถามกันบ่อยๆ

อีกจุดที่ ต้องดูถ้ายัง connect ไม่ได้คือ ไปที่ เมนู > Microsoft SQL Server 20xx > SQL Server Configuration Manager ดูพวก TCP/IP (มีหลายที่) ให้เปลี่ยนเป็น enable แล้ว restart SQL Server Agent ใหม่

Cannot connect to \SQLEXPRESS.

เห็นมีถามกันเป็นระยะกับเรื่อง

TITLE: Connect to Server
——————————

Cannot connect to \SQLEXPRESS.

——————————
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

——————————

Database ‘mssqlsystemresource’ is being recovered. Waiting until recovery is finished. (Microsoft SQL Server, Error: 922)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=922&LinkId=20476

——————————
BUTTONS:

OK
——————————

อ่านซะงงจริงๆ แล้วปัญหาคือ service SQLAgent$SQLEXPRESS หรือ SQL Server Agent (SQLEXPRESS) มัน start ไม่สำเหร็จ ที่เจอบ่อยๆคือ MSSQL$SQLEXPRESS หรือ SQL Server (SQLEXPRESS) มัน start ขึ้นมาก่อน วิธีแก้

  • ไปที่ run พิมพ์ services.msc เอ็นเทอร์
  • แล้วเลื่อนไปหา พวก SQL xxx คลิกขวา Stop ให้หมด
  • แล้วคลิก SQL Server Agent (SQLEXPRESS) คลิกขวา start
  • ทดลอง connect ดูใหม่อีกครั้ง น่าจะ connect ได้แล้ว
  • ถ้าใช้เครื่องเป็น web server ด้วย SQL Server Reporting Services (SQLEXPRESS) ก็ให้ stop และเลือก property เปลี่ยน startup type เป็น manual เพราะว่ามันใช้ port 80 เหมือนกับพวกเว็บเซิร์ฟเวอร์ เป็นสาเหตุที่ทำให้ apache start ไม่สำเร็จได้

จริงๆ ถ้า ms ใส่ใจอีกซักหน่อย หรือเขียน error message ให้ดีกว่านี้ซะหน่อยก็คงไม่มีคนเข้ามาถามกันบ่อยๆ

อีกจุดที่ ต้องดูถ้ายัง connect ไม่ได้คือ ไปที่ เมนู > Microsoft SQL Server 20xx > SQL Server Configuration Manager ดูพวก TCP/IP (มีหลายที่) ให้เปลี่ยนเป็น enable แล้ว restart SQL Server Agent ใหม่

Cannot connect to \SQLEXPRESS.

เห็นมีถามกันเป็นระยะกับเรื่อง

TITLE: Connect to Server
——————————

Cannot connect to \SQLEXPRESS.

——————————
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

——————————

Database ‘mssqlsystemresource’ is being recovered. Waiting until recovery is finished. (Microsoft SQL Server, Error: 922)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=12.00.2000&EvtSrc=MSSQLServer&EvtID=922&LinkId=20476

——————————
BUTTONS:

OK
——————————

อ่านซะงงจริงๆ แล้วปัญหาคือ service SQLAgent$SQLEXPRESS หรือ SQL Server Agent (SQLEXPRESS) มัน start ไม่สำเหร็จ ที่เจอบ่อยๆคือ MSSQL$SQLEXPRESS หรือ SQL Server (SQLEXPRESS) มัน start ขึ้นมาก่อน วิธีแก้

  • ไปที่ run พิมพ์ services.msc เอ็นเทอร์
  • แล้วเลื่อนไปหา พวก SQL xxx คลิกขวา Stop ให้หมด
  • แล้วคลิก SQL Server Agent (SQLEXPRESS) คลิกขวา start
  • ทดลอง connect ดูใหม่อีกครั้ง น่าจะ connect ได้แล้ว
  • ถ้าใช้เครื่องเป็น web server ด้วย SQL Server Reporting Services (SQLEXPRESS) ก็ให้ stop และเลือก property เปลี่ยน startup type เป็น manual เพราะว่ามันใช้ port 80 เหมือนกับพวกเว็บเซิร์ฟเวอร์ เป็นสาเหตุที่ทำให้ apache start ไม่สำเร็จได้

จริงๆ ถ้า ms ใส่ใจอีกซักหน่อย หรือเขียน error message ให้ดีกว่านี้ซะหน่อยก็คงไม่มีคนเข้ามาถามกันบ่อยๆ

อีกจุดที่ ต้องดูถ้ายัง connect ไม่ได้คือ ไปที่ เมนู > Microsoft SQL Server 20xx > SQL Server Configuration Manager ดูพวก TCP/IP (มีหลายที่) ให้เปลี่ยนเป็น enable แล้ว restart SQL Server Agent ใหม่

สร้าง Data Dictionary แบบด่วนๆ

ต้องเขียน Data Dictionary ให้โครงการที่ทำอยู่ แต่มันมีหลายตารางมาก และที่สำคัญคือ แต่ละตารางจะมี relation ยุบยับเต็มไปหมด copy โครงสร้างมาแต่ละตารางมาวางในเอ็กส์เซล์ที่ละตัวก็ตาลาย พลาดได้ง่ายๆเลย

วิธีที่คิดออกคือ มันต้องมีโปรแกรมที่ช่วยงานนี้ได้ซิ เราไม่ใช่คนแรกที่ต้องเขียน Data Dictionary ซะหน่อย มีจริงๆ แต่แพง ไม่ก็ดูแปลกๆ เปลี่ยนไปใช้อีกวิธีคือ ทำไมไม่ให้ SQL ทำให้ละ search เจอ SQL Server Data Dictionary แต่มันก็ดูยาก เลยต้องเอามาเขียนใหม่ซะเอง

query ที่เขียนขึ้นมาใหม่คือ[code language=”sql”]
SET ANSI_DEFAULTS OFF;
GO

SET NOCOUNT ON;
GO

SET TEXTSIZE 8192;
GO

PRINT ‘<HTML><body>’
PRINT ‘<!doctype html>’
PRINT ‘<html>’
PRINT ‘<head>’
PRINT ‘<meta charset="utf-8">’
PRINT ‘<title>script generates a full data dictionary for all tables in a SQL Server by Pitt Phunsanit</title>’
PRINT ‘<style>table {background: #7ba0cd;border-collapse: collapse;border-left: solid 1px #7ba0cd;border-right: solid 1px #7ba0cd;font-family: "Calibri", "sans-serif";font-size: 11pt;width: 100%;}table tr {background: #FFFFFF;border-bottom: solid 1px #7ba0cd;}table thead tr {background-color: #4e80bc;color: white;}table tbody tr:nth-of-type(odd) {background: #d2deed;border-bottom: solid 1px #FFFFFF;box-shadow: 0 2px 0 -1px #7ba0cd;}table tbody tr.case,table tfoot tr {background: #d7d7d7;}</style>’
PRINT ‘</head>’
PRINT ‘<body>’
PRINT ‘<h1>’ + DB_NAME() + ‘</h1>’
PRINT ‘<h3>create date : ‘ + convert(VARCHAR(10), GETDATE(), 111) + ‘</h3>’

SELECT html
,html1
,html2
FROM (
SELECT s.[name] AS [schema]
,CASE
WHEN s.[name] = ‘dbo’
THEN t.[name]
ELSE s.[name] + ‘.’ + t.[name]
END AS [table]
,NULL AS column_id
,CAST(‘<table><cption><b>’ + t.[name] + ‘</b>’ + ISNULL(‘ : ‘+RTRIM(CAST(ep.[value] AS NVARCHAR(4000))), ”) + ‘</caption>’ AS NTEXT) AS html
,CAST(‘<thead>’ + ‘<td style="width:100px;"><b>Primary Key</b></td>’ + ‘<td style="width:200px;"><b>Foreign key</b></td>’ + ‘<td style="width:400px;"><b>Column Name</b></td>’ + ‘<td><b>Description</b></td>’ AS NTEXT) AS html1
,CAST(‘<td style="width:100px;"><b>Data Type</b></td>’ + ‘<td style="width:100px;"><b>Allow Nulls</b></td>’ + ‘<td style="width:100px;"><b>Identity</b></td>’ + ‘<td style="width:100px;"><b>Default Value</b></td>’ + ‘</thead><tbody>’ AS NTEXT) AS html2
FROM sys.tables t
INNER JOIN sys.schemas s ON s.[schema_id] = t.[schema_id]
— get description of table, if available
LEFT OUTER JOIN sys.extended_properties ep ON ep.major_id = t.[object_id]
AND ep.minor_id = 0
AND ep.NAME = ‘MS_Description’
AND ep.class = 1
WHERE t.is_ms_shipped = 0
AND NOT EXISTS (
SELECT *
FROM sys.extended_properties ms
WHERE ms.major_id = t.[object_id]
AND ms.minor_id = 0
AND ms.class = 1
AND ms.[name] = ‘microsoft_database_tools_support’
)

UNION ALL

SELECT s.[name] AS [schema]
,CASE
WHEN s.[name] = ‘dbo’
THEN t.[name]
ELSE s.[name] + ‘.’ + t.[name]
END AS [table]
,c.column_id
,” AS html
,'<tr><td>’ + CASE
WHEN pk.column_id IS NOT NULL
THEN ‘PK’
ELSE ”
END + ‘</td><td>’ + CASE
WHEN fk.primary_table IS NOT NULL
THEN fk.primary_table + ‘.’ + fk.primary_column
ELSE ”
END + ‘</td><td>’ + c.[name] + ‘</td><td>’ + ISNULL(RTRIM(CAST(ep.[value] AS NVARCHAR(4000))), ”) + ‘</td><td>’ + CASE
WHEN uty.[name] IS NOT NULL
THEN uty.[name]
ELSE ”
END + CASE
WHEN uty.[name] IS NOT NULL
AND sty.[name] IS NOT NULL
THEN ‘ (

ELSE ”
END + CASE
WHEN sty.[name] IS NOT NULL
THEN sty.[name]
ELSE ”
END + CASE
WHEN sty.[name] IN (
‘CHAR’
,’NCHAR’
,’VARCHAR’
,’NVARCHAR’
,’BINARY’
,’VARBINARY’
)
THEN ‘ (
‘ + CASE
WHEN c.max_length = – 1
THEN ‘max’
ELSE CASE
WHEN sty.[name] IN (
‘NCHAR’
,’NVARCHAR’
)
THEN CAST(c.max_length / 2 AS VARCHAR(MAX))
ELSE CAST(c.max_length AS VARCHAR(MAX))
END
END + ‘
) ‘
WHEN sty.[name] IN (
‘NUMERIC’
,’DECIMAL’
)
THEN ‘ (
‘ + CAST(c.precision AS VARCHAR(MAX)) + ‘
,’ + CAST(c.scale AS VARCHAR(MAX)) + ‘
) ‘
ELSE ”
END + CASE
WHEN uty.[name] IS NOT NULL
AND sty.[name] IS NOT NULL
THEN ‘
) ‘
ELSE ”
END + ‘</td><td>’ + CASE
WHEN c.is_nullable = 1
THEN ‘Y’
ELSE ”
END + ‘</td><td>’ AS html1
,CASE
WHEN c.is_identity = 1
THEN ‘Y’
ELSE ”
END + ‘</td><td>’ + ISNULL(dc.[definition], ”) + ‘</td></tr>’ AS html2
FROM sys.columns c
INNER JOIN sys.tables t ON t.[object_id] = c.[object_id]
INNER JOIN sys.schemas s ON s.[schema_id] = t.[schema_id]
— get name of user data type
LEFT OUTER JOIN sys.types uty ON uty.system_type_id = c.system_type_id
AND uty.user_type_id = c.user_type_id
AND c.user_type_id <> c.system_type_id
— get name of system data type
LEFT OUTER JOIN sys.types sty ON sty.system_type_id = c.system_type_id
AND sty.user_type_id = c.system_type_id
— get description of column, if available
LEFT OUTER JOIN sys.extended_properties ep ON ep.major_id = t.[object_id]
AND ep.minor_id = c.column_id
AND ep.[name] = ‘MS_Description’
AND ep.[class] = 1
— get default’ s code TEXT
LEFT OUTER JOIN sys.default_constraints dc ON dc.parent_object_id = t.[object_id]
AND dc.parent_column_id = c.column_id
— check for inclusion in primary key
LEFT OUTER JOIN (
SELECT ic.column_id
,i.[object_id]
FROM sys.indexes i
INNER JOIN sys.index_columns ic ON ic.index_id = i.index_id
AND ic.[object_id] = i.[object_id]
WHERE i.is_primary_key = 1
) pk ON pk.column_id = c.column_id
AND pk.[object_id] = t.[object_id]
— check for inclusion in foreign key
LEFT OUTER JOIN (
SELECT CASE
WHEN s.[name] = ‘dbo’
THEN pk.[name]
ELSE s.[name] + ‘.’ + pk.[name]
END AS primary_table
,pkc.[name] AS primary_column
,fkc.parent_object_id
,fkc.parent_column_id
FROM sys.foreign_keys fk
INNER JOIN sys.tables pk ON fk.referenced_object_id = pk.[object_id]
INNER JOIN sys.schemas s ON s.[schema_id] = pk.[schema_id]
INNER JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.[object_id]
AND fkc.referenced_object_id = pk.[object_id]
INNER JOIN sys.columns pkc ON pkc.[object_id] = pk.[object_id]
AND pkc.column_id = fkc.referenced_column_id
) fk ON fk.parent_object_id = t.[object_id]
AND fk.parent_column_id = c.column_id
WHERE t.is_ms_shipped = 0
AND NOT EXISTS (
SELECT *
FROM sys.extended_properties ms
WHERE ms.major_id = t.[object_id]
AND ms.minor_id = 0
AND ms.class = 1
AND ms.[name] = ‘microsoft_database_tools_support’
)

UNION ALL

SELECT s.[name] AS [schema]
,CASE
WHEN s.[name] = ‘dbo’
THEN t.[name]
ELSE s.[name] + ‘.’ + t.[name]
END AS [table]
,999999 AS column_id
,” AS html
,” AS html1
,'</tbody></table><br><hr><br>’ AS html2
FROM sys.tables t
INNER JOIN sys.schemas s ON s.[schema_id] = t.[schema_id]
WHERE t.is_ms_shipped = 0
AND NOT EXISTS (
SELECT *
FROM sys.extended_properties ms
WHERE ms.major_id = t.[object_id]
AND ms.minor_id = 0
AND ms.class = 1
AND ms.[name] = ‘microsoft_database_tools_support’
)
) tmp
ORDER BY tmp.[schema]
,tmp.[table]
,tmp.column_id;

PRINT ‘<a href="https://pitt.plusmagi.com">PlusMagi.com by Pitt Phunsanit ([email protected])</a>’
PRINT ‘</body>’
PRINT ‘</html>’
[/code] query ตัวนี้มีอะไรพิเศษมากกว่าตัวอื่นๆ หลายอย่าง คือ

  1. การเอาไปใช้ แทนที่จะดูผลลัพธ์ในรูปแบบ grid ต้องใช้มันในแบบ Results to Text โดยกด (Ctrl+T) แล้วเอาผลที่ได้ (เป็น code html) ให้เอาไป copy เป็นไฟล์ .html แล้วจะ copy ไปลง excel / word อีกต่อหนึ่งก็ได้ ถ้าใช้ grid ก็ได้ code เหมือนกันแต่จะไม่สวย เพราะพวกคำสั่ง print มันจะไม่ทำงาน
  2. ผลลัพท์ต้องแบ่งเป็น column html, html1, html2 เพราะว่าถ้าผลลัพธ์ที่ออกมากมันยาว จะโดนตัดทิ้งไปเฉยๆ พยามแก้อยู่นาน นานกว่าเขียน code ของมันซะอีก โดยลองใช้ SET TEXTSIZE 8192; และ cast ร่วมกับตัวเลือก Maximum number of characters display in each column ก็ไม่ได้ผล เลยต้องซอย column ออกมาแทน
  3. การเอา code ที่เอาไปใช้ ถ้ามีการจัด code ใหม่ต้องระวังเงื่อนไข อย่าง ‘CHAR’ ถ้าโดนจัดเป็น ‘ CHAR ‘ (มี space) มันจะไม่ทำงาน
  4. การใช้งานถ้าจะให้ข้อมูลออกมาครบต้องทำ table relation และใส่ descriptions ให้ครบ ถึงจะออกมาสวยๆ ครบๆ เหมือนกัน
  5. sub query ด้านล่างๆ จริงๆ คิดว่าถ้าให้มีประสิทธิภาพน่าจะเขียนวิธีอื่นๆ ได้ แต่ตอนนี้ขอใช้ quick and easy (dirty) ไว้ก่อน
  6. ยังมีจุดที่จะแก้ในครั้งต่อไปอย่าง มันยังมี result header อยู่ทำให้มีเส้น ———————- กับ html html1 html2 เกินมาอยู่ แต่ลบเองไม่กี่วิก็ใช้ได้ละ เพราะงั้นปล่อยๆ มันไปก่อน
  7. ใครแก้จุดไหนได้ รบกวนบอกผมด้วยละกันครับ

ตัวอย่างผลลัพธ์ที่ได้

DATABASE NAME

create date : 2016/05/30

areas_cities : อำเภอ
Primary Key Foreign key Column Name Description Data Type Allow Nulls Identity Default Value
PK city_id int
status tinyint Y
geo_id ภูมิภาค int (‘0’)
province_id int (‘0’)
amphur_code varchar (4) Y


areas_cities_lang : อำเภอ (แปล)
Primary Key Foreign key Column Name Description Data Type Allow Nulls Identity Default Value
PK areas_cities.city_id city_id int
PK language char (2)
name nvarchar (600)

จริงๆ มันมีสีสันด้วยนะ สวยจนเอาไปใช้ได้เลยไม่ต้องแต่งอะไรอีก

เลือกช่วงข้อมูล

ระบบที่ทำจะมีการตรวจสอบข้อมูลที่ป้อนเข้ามา โดยบังคับให้ป้อนข้อมูลเข้ามาตามค่าข้อมูลที่มีอยู่ แต่ถ้าจะต้องมา loop เช็กว่าข้อมูลตัวนี้มีในฐานข้อมูลรึเปล่า ก็เสียเวลาและเปลืองทรัพยากร จากการสังเกตุข้อมูลจะอยู่เป็นช่วงๆ เช่น 1 – 5, 8 – 12, 1982 – 2016

ถ้ารู้ช่วงข้อมูล ก็จะตรวจได้ว่าข้อมูลที่ป้อนเข้ามาอยู่ในช่วงที่กำหนดหรือไม่

ไปเจอ Select a range of values ลองแก้ตามได้[code language=”sql”]
WITH Grouped AS ( — Identify groups

SELECT D.bank_id,
grp = D.bank_id – ROW_NUMBER() OVER (
ORDER BY D.bank_id)
FROM banks AS D)
SELECT STUFF ( ( — Concatenate items in the current group

SELECT [text()] = ‘,’ + CONVERT(varchar(11), G2.bank_id)
FROM Grouped AS G2
WHERE G2.grp = Grouped.grp
ORDER BY G2.bank_id
FOR XML PATH (”) ) — Remove initial comma
, 1, 1, ” )
FROM Grouped
GROUP BY Grouped.grp;
[/code]
ผลลัพธ์
1,2,3,4,5,6
8,9,10,11,12,13,14
16,17,18,19,20,21,22,23,24,25,26,27,28,29
31,32,33,34,35,36,37,38,39,40
43,44

ได้เป็นกลุ่มก็จริงแต่ อยากได้ id เริ่มต้นถึง id สุดท้ายของแต่ละกลุ่มเท่านั้น ลองแก้มั่วๆดู[code language=”sql”]
WITH Grouped AS
( SELECT D.bank_id,
grp = D.bank_id – ROW_NUMBER() OVER (
ORDER BY D.bank_id)
FROM banks AS D)
SELECT MIN(Grouped.bank_id) AS start_id,
MAX(Grouped.bank_id) AS end_id
FROM Grouped
GROUP BY Grouped.grp
[/code]
ผลลัพธ์
start_id end_id
———– ———–
1 6
8 14
16 29
31 40
43 44

ได้ตามที่ต้องการเลย