SELECT name, database_id, create_date FROM sys.databases
Monday, December 21, 2020
เรียกดูชื่อฐานข้อมูล
Thursday, December 10, 2020
สร้าง INDEX ให้ได้ผล
ที่มา:www.aware.co.th
หลาย ๆ ท่าน คงมีคำถามในใจว่า ทำไมสร้าง index มาแล้ว ทำไมการดึงข้อมูล (query) ยังช้าอยู่เหมือนเดิม ไม่เห็นจะเร็วขึ้นเลย ทั้งๆ ที่ในตำราก็บอกว่าสร้าง index แล้วจะทำให้ดึงข้อมูลได้เร็วขึ้น พอผมได้เข้าไปดูเลยพบว่าคอลัมน์ที่ทำมาใช้เป็น index มันไม่เหมาะสมนี่เอง ข้อมูลหลักแสนหลักล้านในตาราง แต่ดันเอาคอลัมน์ที่มีค่าที่แตกต่างกันเพียง 7 ค่า (SELECT Distinct Column_Name) มาเป็นทำเป็น index ซะงั้น ซึ่งไม่ถูกต้องตามหลักการเลือกคอลัมน์มาเป็น Index นั่นเอง ทำให้การดึงข้อมูลก็จะยังช้าอยู่เหมือนเดิมครับ
ผมมีเทคนิคง่ายๆ ในการเลือกคอลัมน์เพื่อใช้สร้าง index มาฝากครับ โดยการใช้สูตรตามด้านล่างนี้ครับ
SELECT Distinct Column Name / Number of Rows
หมายถึงให้เรา SELECT Distinct คอลัมน์ที่เราต้องการ (ซึ่งควรจะเป็นค่าที่ไม่ซ้ำและไม่มีค่า Null ปนอยู่) แล้วดูว่า select ได้ทั้งหมดกี่แถว(row) แล้วให้นำไป หาร กับจำนวนแถวทั้งหมดที่อยู่ในตารางนั้นๆ ครับ แล้วดูผลลัพธ์ว่าได้ค่าเป็นเท่าไหร่ ถ้าได้ค่าใกล้ 1 เท่าไร ก็แสดงว่าคอลัมน์นั้นน่าจะนำไปสร้าง index ที่ดีได้ครับ
ตัวอย่างในการเลือกคอลัมน์เพื่อสร้าง index ที่ดี
ถ้าในตารางของเรามีข้อมูล 100,000 แถว และคอลัมน์ที่ต้องการจะนำมาทำเป็น index มีจำนวน 90,000 แถวที่มีค่าไม่ซ้ำกัน
จากสูตรจะได้ว่า 90,000/100,000 = 0.9
0.9 ถือว่าเป็นค่าที่ใกล้ 1 ดังนั้นคอลัมน์นี้เข้าข่ายที่จะนำมาทำ index ที่ดีได้ครับ
ตัวอย่างในการเลือกคอลัมน์เพื่อสร้าง index ที่ไม่ดี
ถ้าในตารางของเรามีข้อมูล 100,000 แถว และคอลัมน์ที่ต้องการจะนำมาทำเป็น index มีจำนวนเพียง 800 แถวที่มีค่าไม่ซ้ำกัน
จากสูตรจะได้ว่า 800/100,000 = 0.008
0.008 ถือว่าเป็นค่าที่ห่างไกลจาก 1 มาก ดังนั้นคอลัมน์นี้ไม่ควรจะนำมาทำ index ครับ ซึ่งกรณีนี้เราควรปล่อยให้การดึงข้อมูลเป็นแบบดึงข้อมูลหมดในตาราง
(Full Table) จะทำให้มีประสิทธิภาพมากกว่าการใช้คอลัมน์นี้มาทำเป็น index ครับ
ส่วนในกรณีที่เราต้องการใช้หลายๆ คอลัมน์ มาสร้างเป็น index ให้พิจารณาเลือกคอลัมน์ที่มีการเรียกใช้บ่อยๆ ในความสัมพันธ์หรือการเชื่อมโยงกันของแต่ละตาราง (join table) ใน SQL Statement ซึ่งส่วนใหญ่ก็มักจะเป็นคอลัมน์เพื่อสร้าง index ที่ดีตามสูตรที่ได้กล่าวไปแล้วครับ
ข้อควรจำ:การที่มี index มากๆ ก็ใช่ว่าจะดีเสมอไป แม้ว่า index จะช่วยให้การดึงข้อมูล (Query) การเปลี่ยนแปลงข้อมูล (Update) และการลบข้อมูล (Delete) ทำได้เร็วขึ้น แต่มันจะไปลดประสิทธิภาพของการเพิ่มข้อมูล (Insert) แทน และการที่มี index จำนวนมาก ก็จะทำให้เปลืองเนื้อที่ในฐานข้อมูลด้วย ดังนั้นเราจึงควรพิจารณาสร้าง index เท่าที่จำเป็นเท่านั้นครับ
Thursday, June 25, 2020
วิธีการใช้คุณสมบัติส่วนขยาย (Extended Properties) ใน MS SQL Server Management Studio (SSMS)
- Specify a caption for a table, view, or column.
- Specify a display mask for a column.
- Display a format of a column, define edit mask for a date column, define number of decimals, etc.
- Specify formatting rules for displaying the data in a column.
- Describe a specific database objects for all users.
ที่เคยใช้คือใส่ข้อมูลอธิบายใน Description ของ แต่ละ Table Column ดูได้จากลิ้งค์นี้
นอกจากนั้นยังสามารถนำมาใช้ได้กับอย่างอื่นได้อีกด้วย
Object ที่ใช้ Extended Properties ได้
- Database
- Stored Procedures
- User-defined Functions
- Table
- Table Column
- Table Index
- Views
- Rules
- Triggers
- Constraints
1.วิธีการสร้าง/ปรับปรุง/ลบ คุณสมบัติส่วนขยาย Add, Update and Drop Extended Properties.
แนะนำวิธีสร้าง Extended Properties ใน Database ไว้ในที่นี้ 2 แบบ
แบบที่ 1. คลิกขวาที่ Database เลือก Properties แล้วเลือก Extended Properties
แล้วป้อนค่าที่ต้องการในช่องใต้ Name, Value
(อย่าลืมว่าในช่อง Name จะต้องใส่ชื่อที่ไม่ซ้ำกับ ชื่อเดิมที่มีอยู่แล้ว)
เสร็จแล้วคลิกปุ่ม OK เพื่อบันทึกข้อมูลที่ป้อนไว้
เมื่อสร้างเสร็จแล้ว ลอง Query เรียกดูด้วยคำสั่ง
SELECT * FROM sys.extended_properties
แบบที่ 2. เรียกใช้ Stored Procedure
EXEC sp_addextendedproperty 'MS_Description', 'Test DB Description'
--เรียกดู Extended Properties เฉพาะ Level ของ Database เท่านั้น
SELECT
DB_NAME() AS DbName,
p.name AS ExtendedPropertyName,
p.value AS ExtendedPropertyValue
FROM
sys.extended_properties AS p
WHERE
p.major_id=0
AND p.minor_id=0
AND p.class=0
ORDER BY
[Name] ASC
--เรียกดู Extended Properties ทั้งหมดใน Database นั้น
SELECT * FROM sys.extended_properties
--เรียกดู Database
SELECT DB_NAME(database_id) AS [DB Name], database_id FROM sys.databases
--เรียกดู Schema
select * from sys.schemas
--เรียกดู Table/Column
select * from INFORMATION_SCHEMA.COLUMNS
select * from sys.tables
--เรียกดู Column เฉพาะที่มี Description
USE YourDatabase
SELECT
[Table Name] = i_s.TABLE_NAME,
[Column Name] = i_s.COLUMN_NAME,
[Data Type] = i_s.DATA_TYPE,
[Description] = s.value
FROM
INFORMATION_SCHEMA.COLUMNS i_s
LEFT OUTER JOIN
sys.extended_properties s
ON
s.major_id = OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME)
AND s.minor_id = i_s.ORDINAL_POSITION
AND s.name = 'MS_Description'
WHERE
OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME), 'IsMsShipped')=0
--AND i_s.TABLE_NAME = 'YourTableName'
ORDER BY
i_s.TABLE_NAME, i_s.ORDINAL_POSITION
--เรียกดูทุก Object ที่มี Description
SELECT S.name as [Schema Name], O.name AS [Object Name], ep.name, ep.value AS [Extended property]
FROM sys.extended_properties EP
LEFT JOIN sys.all_objects O ON ep.major_id = O.object_id
LEFT JOIN sys.schemas S on O.schema_id = S.schema_id
LEFT JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
--เรียกดู Description โดยใช้ Function ชื่อ fn_listextendedproperty
SELECT * FROM ::fn_listextendedproperty ('MS_Description2','Schema','dbo','Table','PageContent','Column','page')
SELECT * FROM fn_listextendedproperty ('MS_Description2','Schema','dbo','Table','PageContent','Column','page')
SELECT * FROM fn_listextendedproperty (NULL,'Schema','dbo','Table','PageContent','Column','page')
SELECT * FROM fn_listextendedproperty (NULL,'Schema','dbo','Table','PageContent','Column',NULL)
SELECT * FROM fn_listextendedproperty (NULL,NULL,NULL,NULL,default,NULL,NULL)
SELECT * FROM fn_listextendedproperty (NULL,NULL,default,NULL,default,NULL,default)
--Add Extended Property (Database Level)
EXEC sp_addextendedproperty 'MS_Description', 'Test DB Description'--Update Extended Property (Database Level)
EXEC sp_updateextendedproperty 'MS_Description', 'Test DB Description2'--Drop Extended Property (Database Level)
EXEC sp_dropextendedproperty 'MS_Description'--Add Table / View Extended Properties
EXEC sp_addextendedproperty 'MS_Description', 'Test Table Description','Schema', dbo, 'table', 'YourTableName' EXEC sp_addextendedproperty 'MS_Description2', 'Test View Description2','Schema', dbo, 'View', 'YourViewName'--Add Column Extended Properties
EXEC sp_addextendedproperty 'MS_Description', 'View Column Description','Schema', dbo, 'View', 'YourViewName', 'Column', YourColumnName EXEC sp_addextendedproperty 'MS_Description', 'Your Description', 'user', dbo, 'table', 'YourTableName', 'column', YourColumnName EXEC sp_addextendedproperty 'MS_Description3', 'Your Description', 'user', dbo, 'table', 'YourTableName', 'column', YourColumnName EXEC sp_addextendedproperty 'MS_Description4', 'Your Description', 'Schema', dbo, 'table', 'YourTableName', 'column', YourColumnName--Add Stored Procedure Extended Properties
EXEC sp_addextendedproperty 'YourProcedureExtenedPropertyName', 'Test Stored Procedure Description','Schema', dbo, 'Procedure', 'YourStoredProcedureName'--Add Trigger Extended Properties
EXEC sp_addextendedproperty 'YourTriggerExtenedPropertyName', 'Test Trigger Description','Schema', dbo, 'Table', 'YourTableName','Trigger','YourTriggerName'
Friday, March 13, 2020
SQL Server, ข้อแตกต่างระหว่าง COALESCE() กับ ISNULL(), เปรียบเทียบ COALESCE() กับ CASE()
Syntax : COALESCE(expression1,expression2,…n,VALUE)
** VALUE คือค่าที่ต้องการเปลี่ยนเมื่อ expression เป็น NULL เช่น ต้องการให้แปลง NULL เป็น 10 ก็ใส่ VALUE เป็น 10 **
ตัวอย่างที่ 1
COALESCE(NULL,NULL,’show value’) => ผล : show value
COALESCE(1,2,’show value’) => ผล : 1
COALESCE(1,NULL,’show value’) => ผล : 1
COALESCE(NULL,2,’show value’) => ผล : 2
Syntax : ISNULL ( check_expression , replacement_value )
ตัวอย่างที่ 2
where isnull(name,”) <> ”
มีค่าเท่ากับ where name is not null and name <> ”
มีค่าเท่ากับ where name <> ”
ตัวอย่างที่ 3
SELECT ISNULL(Weight, 0) FROM tb_DimProduct
ข้อแตกต่างระหว่าง COALESCE() กับ NULL()
1. เมื่อเจอค่า NULL : ISNULL จะแปลงค่าเป็น int แต่ COALESCE เราจะต้องกำหนด data type
2. ISNULL สามารถใช้ได้กับแค่ 2 parameters เท่านั้น ในขณะที่ COALESCE สามารถระบุ parameters ได้มากกว่า 2
เปรียบเทียบ COALESCE() กับ CASE()
— CASE expression:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
WHEN (expression2 IS NOT NULL) THEN expression2
ELSE expressionN
— COALESCE expression:
SELECT COALESCE(expression1,expression2,expressionN)
Wednesday, February 26, 2020
ต้องการรู้จำนวน Records ในแต่ละตาราง , MS Sql Server
USE YourDBname
SELECT
QUOTENAME(sOBJ.name) AS [TableName]
, SUM(sPTN.Rows) AS [RowCount]
FROM
sys.objects AS sOBJ
INNER JOIN sys.partitions AS sPTN
ON sOBJ.object_id = sPTN.object_id
WHERE
sOBJ.type = 'U'
AND sOBJ.is_ms_shipped = 0x0
AND index_id < 2 -- 0:Heap, 1:Clustered
GROUP BY
sOBJ.schema_id
, sOBJ.name
ORDER BY [RowCount] DESC
Sunday, February 2, 2020
SQL Server - Select DateTime Without Minute
SELECT CAST(CONVERT(CHAR(16), GetDate(),20) AS datetime) AS TagDateTime
Thursday, January 16, 2020
วิธีส่งผ่านค่าตัวแปรผ่านจากค่าที่อยู่ใน Cell ของ Excel ไปดึงข้อมูลจาก Ms SQL Server
ตามลิ้งค์นี้
https://www.mssqltips.com/sqlservertip/3436/passing-dynamic-query-values-from-excel-to-sql-server/
ยกตัวอย่างทำให้เห็นจริง
Monday, January 6, 2020
SQL Server, Temporary Table
Sunday, January 5, 2020
Monday, December 2, 2019
Returning TOP N Records
Thursday, November 7, 2019
เรียกดูข้อมูลทุก 15 นาที
แบบเดิม
SELECT Distinct TagDateTime, Column2, Column3
FROM YourTable
WHERE TagDateTime >=@D1 AND TagDateTime <=@D2
and (DATEPART(minute,tagdatetime) % 15) = 0
ORDER BY TagDateTime
อีกแบบ
SELECT TagDateTime, Column2, Column3
FROM YourTable
WHERE TagDateTime IN ( SELECT MIN(TagDateTime)
FROM YourTable
WHERE TagDatetime between @D1 and @D2
GROUP BY CONVERT(VARCHAR(8), TagDateTime, 112), DATEPART(HOUR ,TagDateTime),(DATEPART(MINUTE ,TagDateTime)/15)
)
และถ้าต้องการเรียกทุกชั่วโมง
SELECT TagDateTime, Column2, Column3
FROM YourTable
WHERE TagDateTime IN ( SELECT MIN(TagDateTime)
FROM YourTable
WHERE TagDatetime between @D1 and @D2
GROUP BY CONVERT(VARCHAR(8), TagDateTime, 112), DATEPART(HOUR ,TagDateTime)
)
Wednesday, December 5, 2018
SQL Server, เรียกดู DataBase ทั้งหมดที่มีอยู่บน Server
SELECT * FROM master.sys.databases
SQL Server, คำสั่งเรียกดู Table ทั้งหมดที่มีอยู่ใน Database
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'แต่ถ้าเรียก View มาด้วยก็ไม่ต้องใส่ WHERE
SELECT * FROM INFORMATION_SCHEMA.TABLES
Monday, August 6, 2018
How to get the list of all database users
SELECT * FROM sys.database_principals where (type='S' or type = 'U')
Monday, July 23, 2018
วิธี Select Description ของ Table ใน SQL Server มา
USE [YourDataBaseName] SELECT [Table Name] = i_s.TABLE_NAME, [Column Name] = i_s.COLUMN_NAME, [Description] = s.value FROM INFORMATION_SCHEMA.COLUMNS i_s LEFT OUTER JOIN sys.extended_properties s ON s.major_id = OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME) AND s.minor_id = i_s.ORDINAL_POSITION AND s.name = 'MS_Description' WHERE OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME), 'IsMsShipped')=0 --AND i_s.TABLE_NAME = 'YourTableName' ORDER BY i_s.TABLE_NAME, i_s.ORDINAL_POSITION
Wednesday, December 13, 2017
MS SQL Server Management - Cannot change design
ปัญหา
MS SQL Server Management Studio 2008 R2แก้ไขโครงสร้างของ Table แล้ว Error ดังรูปข้างล่าง
สาเหตุ
Check Box ช่อง Prevent saving changes that require table re-creation ถูกเลือกอยู่วิธีแก้ไข
เข้าไปที่ Tools > Options…แล้ว เอาเครื่องหมายถูกหน้า Check box: Prevent saving… ออก
Monday, November 27, 2017
แก้ปัญหาไม่แสดงผลตามต้องการเหตุจากบางคอลัมน์ในสูตรเป็น NULL
- ปัญหาที่พบคือบาง Record นั้น ColumnB ไม่มีข้อมูล (NULL) ทำให้สูตรที่มี ColumnB อยู่ด้วยเป็น NULL ตามไปด้วย แต่ที่ต้องการคือถ้า Record ไหนที่ ColumnB เป็น NULL ก็กำหนดค่าให้มีค่าเป็น 0 ซะ
- แก้ปัญหาโดยใช้ IsNull มาช่วยเช่น
- ถ้าเป็นคำสั่งใน SQL Server
- SELECT YourColumn, ColumnA, ColumnB, IsNull(ColumnA,0)+IsNull(ColumnB,0) As SumAandB FROM YourTable
- จะได้ผลตามที่ต้องการ
- ถ้าเป็นใน Crystal Report ก็อาจต้องสร้าง Formula fields เพิ่มเช่น
- IF IsNull(ColumnB) THEN 0 ELSE ColumnB
Monday, March 20, 2017
Set language ใน SQL Server
SELECT [TagDateTime]...
Wednesday, September 21, 2016
การเขียน Stored Procedure บน SQL Server
แหล่งข้อมูล http://www.thaicreate.com/tutorial/sqlserver-stored-procedure-create.html
ตอนที่ 1 : รู้จักและการเขียน Stored Procedure บน SQL Server (SQL Server : Stored Procedure) ในบทความของไทยครีเอทผมอาจจะไม่ค่อยได้พูดถึง Stored Procedure ซะเท่าไหร่ เพราะในการเขียนโปรแกรมทั่ว ๆ ไป ที่ไม่ต้องการความซับซ้อนมากนัก การเขียน SQL Query ปกติก็สามารถทำงานได้ และในการเขียนโปรแกรมรุ่นใหม่ ๆ ไม่ว่าจะเป็น PHP หรือ .Net Application หรืออื่น ๆ ก็มี Framework ใหม่ ๆ ที่ออกมาช่วยจัดการ ORM(Oreited Relational Mapping) ช่วยการเขียนติดต่อกับ Database นั้นง่ายมาก ยิ่งทำให้การเขียน Stored Procedure นั้นอาจจะไม่ค่อยมีความจำเป็นซะเท่าไหร่ และโดยเฉพาะใน .Net Application ที่ได้รับความนิยมมากในปัจุบัน ยังมี Framework ที่จัดการกับ Database อย่างเช่น LINQ to SQL , LINQ to Entities หรือ Entity Framework Model ที่สนับสนุนการเขียน Coding ทำการ Select, Insert, Update, Delete ในรูปแบบของ Syntax ภาษานั้น ๆ บนโปรแกรมได้เลย โดยไม่ต้องสนใจที่จะเขียน SQL และยังมีประโยชน์เมื่อต้องการเปลี่ยนประเภทของ Database เช่น MySQL, Oracle ก็ไม่ต้องมานั้งทำการแก้ไขหรือเขียน Stored Procedure ใหม่
การเขียน Stored Procedure จะจำเป็นมากในการพัฒนาระบบขนาดใหญ่ ที่มีการจัดเก็บข้อมูลและประมวลผลจำนวนมาก ๆ เพราะการเขียน Query ในปกติ ที่มีการติดต่อกับข้อมูลหลาย ๆ ครั้ง เราจะต้อง Select แล้วใช้โปรแกรมอ่านค่า เมื่ออ่านได้ค่าแล้วค่อยส่งไปประมวลผลที่ Database ซ้ำ ๆ ซึ่งจะเป็นการทำงานซ้ำซ้อน มีการรับส่งระหว่าง Application กับ Database เป็นสิบหรือหลายร้อยครั้ง ซึ่งผลที่ตามมาคือ Performance ของโปรแกรมจะทำงานช้ามาก ทางเลือกในการแก้ปํยหานี้ก็คือ เราใช้การทำงานซ้ำซ้อนทั้งหมดนี้ที่ Database แทน โดยเราเพียงส่งค่า Parameters ที่จำเป็นต้องใช้ จากนั้นบน Database ก็จะนำค่า Parameters ที่ส่งไปนั้น ทำงานตามคำสั่งต่าง ๆ บน Stored Procedure ที่ เราเขียนขึ้น เมื่อได้ค่าที่ต้องการค่อยส่งค่า Result กลับมายังโปรแกรม วิธีนี้จะเป็นการเพิ่มประสิทธิภาพการทำงานของโปรแกรมให้ทำงานเร็วขึ้น และลด Traffic ระหว่าง Database กับ Application ได้สูงมาก
ข้อดีการใช้ Stored Procedure
- Syntax เขียนง่าย เข้าใจง่าย และในปัจจุบันมี Tools ที่ช่วยให้การ Debug ง่ายมาก
- เพิ่มประสิทธิภาพการทำงานการ Query Database ได้อย่างดีเยี่ยม ลดภาระการทำงานของ Application
- ลด Traffic ของ Network หรือระหว่าง Database กับ Application
- การพัฒนาค่อนข้างจะเป็นระบบ แยกระหว่าง Application Logic กับ Database Logic ได้ชัดเจน เช่น ถ้าต้องการแก้ไข Logic ของ Database อาจจะเพียงแก้ไขที่ Stored Procedure เท่านั้น
- การเขียน Stored จะผูกกกับ Database นั้น ๆ เมื่อเปลี่ยน Database ไปใช้ตัวอื่น จะต้องเขียน Stored ใหม่ทั้งหมด
- Syntax ของการเขียน Stored Procedure จะไม่เหมือนกัน
- เมื่อนำไปใช้บน Production Server การ Debug ตรวจสอบหาข้อผิดพลาดทำได้ยากพอสมควร
ตอนที่ 3: การ Print และแสดงผลบน Stored Procedure (SQL Server : Stored Procedure)
ตอนที่ 4 : การสร้างตัวแปร Declare Variable บน Stored Procedure (SQL Server : Stored Procedure
ตอนที่ 5 : การสร้าง Declare Table สร้างตัวแปรแบบตาราง (SQL Server : Stored Procedure)
ตอนที่ 8 : การใช้ If ....Else If...Else สร้างเงื่อนไข (SQL Server : Stored Procedure)
ตอนที่ 9 : การใช้ Try Catch บน Stored Procedure (SQL Server : Stored Procedure)
ตอนที่ 10 : การใช้ OUTPUT และ OUT เพื่อส่งค่ากลับ (SQL Server : Stored Procedure)
ตอนที่ 11 : การใช้ Transaction เพื่อ Rollback และ Commit (SQL Server : Stored Procedure)
ตอนที่ 12 : การใช้ Cursor ระหว่าง (Between) Stored Procedure (SQL Server : Stored Procedure)
ตอนที่ 13 : การ Debug Stored Procedure บน Visual Studio 2010,2012,2013,2015 และอื่น ๆ
ตอนที่ 14 : การสร้าง View Table บน SQL Server Database (SQL Server : View Table)
ตอนที่ 15 : การสร้าง Trigger บน SQL Server Database (SQL Server : Trigger)
ตอนที่ 16 : การสร้าง Function บน Server Database (SQL Server : Function)
ตอนที่ 17 : PHP เรียกใช้ EXEC/CALL - SQL Server Stored Procedure ด้วย sqlsrv และ pdo
ตอนที่ 18 : Visual Basic (VB.Net) เรียกใช้ EXEC SQL Server Stored Procedure
ตอนที่ 20 : Visual C# (C# .Net) เรียกใช้ EXEC/CALL - SQL Server Stored Procedure
Monday, April 27, 2015
วิธีแก้ error Database Diagrams
“Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.”
มีวิธีแก้ไขดังนี้
New Query แล้วรันคำสั่งประมาณนี้
ALTER AUTHORIZATION ON DATABASE::databasename TO saเช่นALTER AUTHORIZATION ON DATABASE::elec TO sa










