คำถามติดแท็ก sql-server

Microsoft SQL Server ทุกรุ่น (ไม่ใช่ MySQL) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น sql-server-2016 เนื่องจากมักเกี่ยวข้องกับคำถาม

1
แนวปฏิบัติที่ดีที่สุดในปัจจุบันเกี่ยวกับการปรับขนาด varchar ใน SQL Server คืออะไร
ฉันพยายามเข้าใจวิธีที่ดีที่สุดในการตัดสินใจว่าคอลัมน์ varchar ขนาดใหญ่ควรเป็นอย่างไรทั้งจากมุมมองการจัดเก็บและประสิทธิภาพ ประสิทธิภาพ จากการวิจัยของฉันดูเหมือนว่าควรใช้ varchar (สูงสุด) เฉพาะในกรณีที่คุณต้องการเท่านั้น นั่นคือถ้าคอลัมน์จะต้องรองรับมากกว่า 8000 ตัวอักษรเหตุผลหนึ่งคือการขาดการจัดทำดัชนี (แม้ว่าฉันน่าสงสัยเล็กน้อยของการจัดทำดัชนีในเขตข้อมูล varchar โดยทั่วไปฉันค่อนข้างใหม่กับหลักการ DB แม้ว่าอาจจะไม่มีมูลเลย ) และการบีบอัด (ยิ่งกังวลเรื่องพื้นที่เก็บข้อมูล) ในความเป็นจริงแล้วคนทั่วไปดูเหมือนจะแนะนำให้ใช้เฉพาะสิ่งที่คุณต้องการเมื่อทำ varchar (n) .... การ oversize ไม่ดีเพราะการสืบค้นจะต้องคำนึงถึงขนาดสูงสุด แต่ก็มีการระบุด้วยว่าเครื่องยนต์จะใช้ขนาดครึ่งหนึ่งที่ระบุไว้เป็นค่าประมาณขนาดเฉลี่ยจริงของข้อมูล นี่หมายความว่าเราควรกำหนดจากข้อมูลว่าขนาดเฉลี่ยคืออะไรเพิ่มขนาดเป็นสองเท่าและใช้เป็น n สำหรับข้อมูลที่มีค่าความแปรปรวนต่ำมาก แต่ไม่เป็นศูนย์ นี่หมายถึงการขยายขนาดเกินขนาดสูงสุด 2 เท่าซึ่งดูเหมือนจะมาก แต่อาจไม่ใช่หรือ ข้อมูลเชิงลึกจะได้รับการชื่นชม ที่เก็บข้อมูล หลังจากอ่านเกี่ยวกับวิธีการทำงานของหน่วยเก็บข้อมูลแบบ in-row และ out-of-row และโปรดทราบว่าการจัดเก็บข้อมูลจริงนั้น จำกัด อยู่ที่ข้อมูลจริงฉันคิดว่าตัวเลือกของ n นั้นมีพื้นที่เก็บข้อมูลน้อยมากหรือไม่มีเลย ทำให้แน่ใจว่ามันใหญ่พอที่จะเก็บทุกอย่างไว้ได้) แม้แต่การใช้ varchar (สูงสุด) …

3
วิธีเพิ่มข้อ จำกัด เริ่มต้นขณะสร้างตาราง SQL Server [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ฉันพยายามสร้างตารางใหม่ที่มีคอลัมน์ตามด้วยข้อ จำกัด ดังที่แสดงด้านล่าง Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. ) อย่างไรก็ตามฉันได้รับข้อความแสดงข้อผิดพลาดใกล้กับข้อ จำกัด เริ่มต้นว่า 'ใกล้ไวยากรณ์ที่ไม่ถูกต้อง' สำหรับ ''

4
แสดงรายการงานตารางเวลาและชุดข้อมูลการเรียกใช้ที่กำหนดเวลาไว้ถัดไป
แสดงรายการงานตารางเวลาและชุดข้อมูลการเรียกใช้ที่กำหนดเวลาไว้ถัดไป ฉันกำลังพยายามแสดงรายการงานตารางเวลาและกำหนดการเรียกใช้ชุดข้อมูลต่อไป อย่างไรก็ตามฉันดูเหมือนจะไม่ประสบความสำเร็จ sysjobactivity มี next_scheduled_run_date ซึ่งเป็นสิ่งที่ฉันต้องการ แต่ฉันไม่สามารถคิดออกเพื่อเชื่อมต่อกับทั้งงานและกำหนดการ หากมีวิธีอื่นนอกเหนือจากผ่านsysjobactivityโปรดแนะนำฉันไปที่นั่น SELECT sj.name AS jobName , ss.name AS scheduleName , sja.next_scheduled_run_date FROM msdb.dbo.sysjobs sj INNER JOIN msdb.dbo.sysjobactivity sja ON sja.job_id = sj.job_id INNER JOIN msdb.dbo.sysjobschedules sjs ON sjs.job_id = sja.job_id INNER JOIN msdb.dbo.sysschedules ss ON ss.schedule_id = sjs.schedule_id WHERE (sj.name LIKE 'xray%') …

3
แปลงค่าตัวเลขสตริงด้วยเครื่องหมายจุลภาคเป็นตัวคั่นทศนิยมเป็น NUMERIC (10, 2)
ฉันมีตาราง SQL ของคอลัมน์ varchar ซึ่งมีตัวเลขที่จัดรูปแบบกรีก (. เป็นตัวคั่นหลักพันและเครื่องหมายจุลภาคเป็นตัวคั่นทศนิยม) การแปลงแบบคลาสสิก CONVERT(numeric(10,2),REPLACE([value],',','.')) ไม่ทำงานเพราะ (ตัวคั่นหลักพัน) ฆ่าการแปลง เช่นลอง CONVERT(numeric(10,2),REPLACE('7.000,45',',','.')) ฉันต้องการแปลงค่าดังกล่าวเป็นตัวเลข (10,2) ข้อเสนอแนะใด ๆ ของวิธีการจัดการมันได้หรือไม่

2
ทำไม io_stall_writes_ms สูงกว่ามากสำหรับ tempdb
เรามีไฟล์ข้อมูลผู้ใช้และระบบในดิสก์ไดรฟ์เดียวกัน (io_stall_write_ms / (1.0 + num_of_writes)) ต่ำกว่า 2 สำหรับไฟล์ผู้ใช้ แต่ไฟล์ tempdb มักจะมีมากกว่า 400 ฉันเห็นว่าในบางเซิร์ฟเวอร์และฉันอยากรู้ว่าถ้ามีเหตุผลที่ใช้เวลานานในการเขียนไปยัง tempdb กว่าไฟล์ข้อมูลฐานข้อมูลปกติ SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory, ( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result, io_stall_write_ms, num_of_writes, fs.database_id, fs.[file_id] FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs INNER JOIN sys.master_files AS mf ON fs.database_id = …

1
เราสามารถใส่เครื่องหมายเท่ากับ (=) หลังจากฟังก์ชั่นรวมใน Transact-SQL ได้หรือไม่?
ฉันได้พบสคริปต์เช่นนี้: set @sum = sum = (case when somecol1 is null then DATEDIFF(d,[somecol2],somecol3) else 0 end) ฉันไม่เข้าใจความหมายของเครื่องหมายเท่ากับ (=) หลังจากรวมคำหลักที่สอง เมื่อฉันเรียกใช้แบบสอบถามจะไม่แสดงข้อผิดพลาดใด ๆ ทั้งที่มีเครื่องหมายเท่ากับและไม่มี sumฉันต้องการที่จะทราบวัตถุประสงค์ของการวางเครื่องหมายเท่ากับหลังจากคำหลัก นั่นเป็นความผิดพลาดหรือไม่? ขอบคุณ

4
ทางเลือกในการสำรองข้อมูลเครือข่าย
ในสภาพแวดล้อมของเราเรามีเซิร์ฟเวอร์บางตัวที่อยู่ในกลุ่ม Always On Availability และบางเซิร์ฟเวอร์เป็นแบบสแตนด์อโลน ปกติแล้วเราจะสำรองข้อมูลไปยังเครือข่ายที่ใช้ร่วมกัน แต่เมื่อไม่นานมานี้เราได้สังเกตเห็นว่าเมื่อฐานข้อมูลมีขนาดใหญ่ขึ้นเรื่อย ๆ เวลาที่ใช้ก็นานขึ้นซึ่งจะทำให้เครือข่ายทั้งหมดช้าลง สคริปต์ของ Ola hallengren กำลังถูกใช้กับการบีบอัดและยังแยกไฟล์สำรองข้อมูล ฉันกำลังทำการสำรองข้อมูล "เต็มรูปแบบ" ทุกวันเท่านั้น การสำรองข้อมูลจะไปที่ไดรฟ์เครือข่ายแบ่งปัน EMC isilon ฉันไม่เคยพอใจกับ EMC DD Boost ทางเลือกเดียวคือทำการสำรองข้อมูลในเครื่องแล้วคัดลอกไปยังเครือข่ายเดียวกัน มีวิธีที่มีประสิทธิภาพนอกเหนือจากข้างต้นหรือไม่

1
คำว่า "unmentionable" ใน SQL คืออะไร?
คำว่า "unmentionable" ใน SQL คืออะไร? ฉันกำลังอ่านsys.query_store_query_text (Transact-SQL)และฉันเห็นสิ่งต่อไปนี้ดังนั้นฉันจึง google {SQL "unmentionable" คำ} has_restricted_text บิต ข้อความแบบสอบถามมีรหัสผ่านหรือคำอื่น ๆ ที่ไม่สามารถกล่าวถึงได้ ลิงก์อื่น ๆ จากนั้น 3 ลิงก์ที่นำฉันกลับไปยังที่ที่ฉันพบฉันไม่พบสิ่งใดที่แสดงความสัมพันธ์กับรหัสผ่านหรือสิ่งใดก็ตามที่ SQL อาจสนใจ

1
ALTER TABLE หรือไม่ DROP COLUMN เป็นเพียงข้อมูลเมตาดาต้าเท่านั้น
ฉันพบแหล่งข้อมูลหลายแห่งที่ระบุเปลี่ยนแปลงตาราง ... DROP COLUMN เป็นการดำเนินการเฉพาะเมตาดาต้า แหล่ง สิ่งนี้จะเป็นอย่างไร ข้อมูลในระหว่าง DROP COLUMN ไม่จำเป็นต้องถูกลบออกจากดัชนีที่ไม่ใช่คลัสเตอร์และดัชนี / ฮีปคลัสเตอร์หรือไม่? นอกจากนี้เหตุใดMicrosoft Docs จึงบอกเป็นนัยว่าเป็นการดำเนินการที่บันทึกไว้อย่างสมบูรณ์ การปรับเปลี่ยนที่ทำกับตารางจะถูกบันทึกและสามารถกู้คืนได้อย่างสมบูรณ์ การเปลี่ยนแปลงที่ส่งผลกระทบต่อทุกแถวในตารางขนาดใหญ่เช่นลดลงคอลัมน์หรือในบางรุ่นของ SQL Server เพิ่มคอลัมน์ไม่เป็นโมฆะด้วยค่าเริ่มต้นที่สามารถใช้เวลานานในการสร้างที่สมบูรณ์และบันทึกเข้าสู่ระบบจำนวนมาก เรียกใช้คำสั่ง ALTER TABLE เหล่านี้ด้วยความระมัดระวังเช่นเดียวกับคำสั่ง INSERT, UPDATE หรือ DELETE ที่มีผลกับแถวจำนวนมาก ในฐานะที่เป็นคำถามรอง: เครื่องยนต์จะติดตามคอลัมน์ที่ถูกทิ้งได้อย่างไรหากข้อมูลไม่ได้ถูกลบออกจากหน้าเว็บต้นแบบ

1
วิธี "การตรวจสอบตนเอง" ทั้งหมดของสิทธิ์การใช้งานเซิร์ฟเวอร์ SQL ที่องค์กร
ดังนั้นฉันจึงเริ่มงานใหม่กับองค์กรที่ไม่หวังผลกำไรที่ดีซึ่งอยู่ประมาณสองสามทศวรรษ พวกเขามีรุ่นและรุ่นของ SQL Server หลากหลาย (เช่น Express 2005 ถึง 2016 SP2 Enterprise) และข้าม Windows VMs จำนวนมาก (ทุกรุ่นตั้งแต่ปี 2003 ถึง 2016) DBAs ก่อนหน้าไม่ได้ทำเอกสารใด ๆ เกี่ยวกับจำนวนสิทธิ์ใช้งานที่ บริษัท เป็นเจ้าของหรือรุ่นต่าง ๆ ไม่มีบันทึกที่เป็นประโยชน์อย่างมีประสิทธิภาพ ฉันเรียกใช้ชุดเครื่องมือ MAPเพื่อรวบรวมรายละเอียดเกี่ยวกับ SQL Server อย่างน้อยฉันก็มีจุดเริ่มต้นสำหรับเซิร์ฟเวอร์ที่มีอยู่และฉันขุดลงไปซึ่งยังคงให้บริการข้อมูลการผลิต ฉันได้ใช้เครื่องมือApexSQL Discoverใหม่กับผลลัพธ์ที่หลากหลาย (ขอโทษด้วยที่ฉันรักสิ่งของของคุณ แต่ฉันไม่สามารถรอ 3 วันเพื่อให้เครื่องมือนี้ทำงานเมื่อฉันต้องการเพิ่มเซิร์ฟเวอร์ 1 เครื่อง) และdbatools find-dbainstance (ไม่ใช่แฟนตัวยงของการใช้ PS เพื่อส่งออกข้อมูลจำนวนมาก) ดังนั้นโดยรวมทั้งหมดนี้เข้าด้วยกันฉันค่อนข้างมั่นใจ ณ จุดนี้ว่าฉันได้ค้นพบอินสแตนซ์ส่วนใหญ่หรือทั้งหมดที่เคยมีอยู่ในโดเมนนี้ แน่นอนผมได้สอบถามการออกใบอนุญาตในหลายวิธีและทั่วถึงตรวจสอบไร้ประโยชน์อย่างสมบูรณ์ …

1
ทำไมคุณสามารถดร็อปมุมมอง SQL Server ในฐานข้อมูลปัจจุบันเท่านั้น
เพิ่งสังเกตุสิ่งนี้และมีเวลาที่ยากลำบากในการหาเหตุผลทางเทคนิค ตารางสามารถถูกดร็อปโดยใช้ชื่อสามส่วน แต่มุมมองถูก จำกัด ไว้ที่สองส่วนชื่อ อะไรคือเหตุผลเบื้องหลังสิ่งนี้
11 sql-server  view 

1
เลือก * จากมุมมองใช้เวลา 4 นาที
ฉันกำลังประสบปัญหาซึ่งเมื่อฉันเรียกใช้แบบสอบถามกับมุมมองจะใช้เวลา 4+ นาที อย่างไรก็ตามเมื่อฉันเรียกใช้ความกล้าของแบบสอบถามมันจะเสร็จสิ้นในเวลา 1 วินาที สิ่งเดียวที่ฉันไม่แน่ใจเกี่ยวกับคือตารางที่เข้าร่วมเป็นตารางชั่วคราว แผนคิวรีแบบเฉพาะกิจ: https://www.brentozar.com/pastetheplan/?id=BykohB2p4 ดูแผนแบบสอบถาม: https://www.brentozar.com/pastetheplan/?id=SkIfTHh6E มีข้อเสนอแนะเกี่ยวกับสถานที่ที่จะลองและคิดออก ดูรหัส: ALTER VIEW [dbo].[vwDealHistoryPITA] AS SELECT ROW_NUMBER() OVER (PARTITION BY cm.CodeMasterID ORDER BY cm.CodeMasterID, cm.LastUpdateDate) AS Deal_HistoryID, cm.CodeMasterID, cm.ProjectName, cm.[Status], d.CompanyID, d.DealTypeMasterID, cm.[Description], d.PassiveInd, d.ApproxTPGOwnership, d.NumberBoardSeats, d.FollowonInvestmentInd, d.SocialImpactInd, d.EquityInd, d.DebtInd, d.RealEstateInd, d.TargetPctgReturn, d.ApproxTotalDealSize, cm.CurrencyCode, d.ConflictCheck, cm.CreatedDate, cm.CreatedBy, cm.LastUpdateDate, …
11 sql-server 

2
เหตุใดแบบสอบถาม DELETE จึงทำงานในรูปแบบหนึ่งนานกว่าอีกรูปแบบหนึ่ง
ฉันมีรหัสการล้างข้อมูลเฉพาะที่พยายามลบรายการที่ซ้ำบางรายการ สิ่งนี้ทำงานได้อย่างสมบูรณ์บนเว็บไซต์ของลูกค้าจำนวนมาก บันทึกบอกฉันว่าแบบสอบถามนี้ใช้อย่างน้อย 1 วินาทีสูงสุด 45 วินาที: DELETE FROM [tbl] WHERE [Id] NOT IN ( SELECT MIN([Id]) FROM [tbl] GROUP BY [IdProject], [IdRepresentative], [TimeStart] ) แต่ฉันมีลูกค้าที่แบบสอบถามนี้ทำงานนานกว่า 4 ชั่วโมง (ถึงตอนนี้และไม่สิ้นสุด)! ฉันตรวจสอบ DB ( DBCC CHECKDB) ฉันอัปเดตสถิติ ( sp_updatestats) แล้วและยังUPDATE STATISTICS [tbl] WITH FULLSCANไม่แสดงการเปลี่ยนแปลงอีกด้วย ฉันมีการสำรองข้อมูลดั้งเดิมของฐานข้อมูลจากลูกค้า ฉันเรียกใช้บน SQL Server 14.0.2002.14 ฉันมี Standard Edition …

2
ทำไมฉันถึงได้รับการแปลงโดยนัยของ Int / Smallint เป็น Varchar และมันส่งผลกระทบต่อการประเมิน Cardinality จริง ๆ หรือไม่
ฉันกำลังพยายามแก้ไขปัญหาแบบสอบถามที่ทำงานช้าโดยใช้ Show Plan Analysis (SSMS) บนแผนปฏิบัติการจริง เครื่องมือวิเคราะห์ชี้ให้เห็นว่าการประมาณการจำนวนแถวนั้นไม่ได้ผลการค้นหาที่ส่งคืนในบางสถานที่ในแผนและให้คำเตือนการแปลงโดยนัยเพิ่มเติม ฉันไม่เข้าใจการแปลงโดยนัยเหล่านี้ของ int ไปเป็น Varchar- เขตข้อมูลที่อ้างถึงไม่ได้เป็นส่วนหนึ่งของพารามิเตอร์ / ตัวกรองใด ๆ ในแบบสอบถามและในตารางทั้งหมดที่เกี่ยวข้องกับชนิดข้อมูลคอลัมน์จะเหมือนกัน: ฉันได้รับคำเตือนจาก Cardinality ด้านล่าง: การแปลงประเภทในนิพจน์ (CONVERT_IMPLICIT (varchar (12), [ccd]. [profileid], 0)) อาจส่งผลต่อ "CardinalityEstimate" ในตัวเลือกแผนแบบสอบถาม - ฟิลด์นี้เป็นจำนวนเต็มทุกที่ในฐานข้อมูลของฉัน การแปลงประเภทในนิพจน์ (CONVERT_IMPLICIT (varchar (6), [ccd]. [nodeid], 0)) อาจส่งผลต่อ "CardinalityEstimate" ในตัวเลือกแผนแบบสอบถาม - ฟิลด์นี้มีขนาดเล็กทุกที่ใน DB ของฉัน การแปลงประเภทในการแสดงออก (CONVERT_IMPLICIT (varchar (6), [ccd]. …

1
เหตุใดหน้าต่างโหมดแบตช์จึงรวมการคำนวณทางคณิตศาสตร์มากเกินไป
แบบสอบถามต่อไปนี้ดำเนินการแบบหน้าต่างSUMเหนือตาราง columnstore ด้วย1500 total rowsซึ่งแต่ละอันมีค่า 0 หรือ 1 และมัน overflows INTชนิดข้อมูล ทำไมสิ่งนี้จึงเกิดขึ้น SELECT a, p, s, v, m, n, SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END) OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition FROM ( SELECT a, p, s, v, m, n, RANK() …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.