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

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

6
ตัดช่องว่าง (ช่องว่างแท็บบรรทัดใหม่)
ฉันใช้ SQL Server 2014 และฉันต้องล้างช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของเนื้อหาคอลัมน์ซึ่งช่องว่างอาจเป็นช่องว่างแบบง่ายแท็บหรือการขึ้นบรรทัดใหม่ (ทั้ง\nและ\r\n) เช่น ' this content ' should become 'this content' ' \r\n \t\t\t this \r\n content \t \r\n ' should become 'this \r\n content' และอื่น ๆ ฉันสามารถทำได้เฉพาะกรณีแรกด้วย UPDATE table t SET t.column = LTRIM(RTRIM(t.column)) แต่สำหรับกรณีอื่น ๆ มันไม่ทำงาน

1
ทำไม suser_name () ไม่แสดงการเปลี่ยนแปลงชื่อบัญชีโฆษณา?
ชื่อผู้ใช้ของเรามีการเปลี่ยนแปลงอย่างถูกต้องตามกฎหมายดังนั้นเราจึงเปลี่ยนชื่อผู้ใช้ Active Directory ให้ตรงกัน - จาก domain \ oldname เป็น domain \ newname อย่างไรก็ตามเมื่อ suser_sname () ถูกเรียกโดยผู้ใช้รายนี้ในขั้นตอนการจัดเก็บมันจะส่งคืนชื่อเก่าไม่ใช่ชื่อใหม่ Googling ทำให้ฉันไปที่KB 946358ซึ่งแนะนำว่าชื่อของพวกเขาถูกแคชบนเซิร์ฟเวอร์และไม่ได้อัปเดตน่าจะเป็นเพราะ suser_name () กำลังเรียก LsaLookupSids อย่างไรก็ตามการแก้ปัญหาในบทความนั้นเกี่ยวข้องกับการรีสตาร์ทเซิร์ฟเวอร์และแม้ว่าฉันจะยังคงต้องการที่จะเข้าใจปัญหา หากฉันเปลี่ยนบริบทเป็นชื่อที่ถูกต้องจะกลับมา: EXECUTE AS LOGIN = 'domain\newname' GO SELECT suser_name() --returns 'domain\newname' ... ฉันจะสันนิษฐานว่าสิ่งนี้จะเรียก LsaLookupSids และจะส่งคืนชื่อที่ไม่ถูกต้อง ดูเหมือนว่าฉันจะไม่เข้าใจกลไกการทำงานที่นี่จริงๆ ข้อสังเกตบางอย่างที่อาจสำคัญ: ผู้ใช้รายนี้ไม่มีการเข้าสู่ระบบที่ชัดเจนบนเซิร์ฟเวอร์ แต่พวกเขาเป็นสมาชิกของกลุ่มโฆษณาที่ทำ ชื่อที่เปลี่ยนแปลง (โดเมน \ newname) จะปรากฏในชุดผลลัพธ์สำหรับexec xp_logininfo …

4
วิธีการแปลงอินสแตนซ์เริ่มต้นเป็นอินสแตนซ์ที่มีชื่อใน SQL Server 2012
วิธีการแปลงอินสแตนซ์เริ่มต้นเป็นอินสแตนซ์ที่มีชื่อใน SQL Server 2012 โดยไม่ได้ตั้งใจฉันเลือกตัวเลือกอินสแตนซ์เริ่มต้นและติดตั้งแล้ว ตอนนี้ฉันต้องเปลี่ยนเป็นอินสแตนซ์ที่มีชื่อ วิธีการเปลี่ยน
10 sql-server 

2
วิธีระบุพารามิเตอร์เริ่มต้นของ SQL ในการติดตั้งแบบไม่โต้ตอบผ่านบรรทัดคำสั่ง
ฉันต้องการแก้ไขข้อบกพร่องช่องว่างของตัวตนใน SQL Server 2012 ผ่าน-T272พารามิเตอร์เริ่มต้น ฉันจะทำให้สิ่งนี้เป็นอัตโนมัติหลังจากการติดตั้งได้อย่างไร ฉันไม่พบพารามิเตอร์การติดตั้งสำหรับพารามิเตอร์เริ่มต้น

3
แทนที่อักขระพิเศษในคอลัมน์ด้วยช่องว่าง
ฉันกำลังพยายามเขียนคิวรีที่แทนที่อักขระพิเศษด้วยช่องว่าง โค้ดด้านล่างช่วยในการระบุแถว (อักขระตัวเลขและตัวอักษรจุลภาคและช่องว่างใช้ได้): SELECT columnA FROM tableA WHERE columnA like '%[^a-Z0-9, ]%' ฉันจะรวมฟังก์ชั่นแทนที่ในคำสั่ง select ได้อย่างไรเพื่อให้อักขระทั้งหมดที่ไม่ใช่ตัวอักษรและตัวเลขจุลภาคและช่องว่างในชุดผลลัพธ์ถูกแทนที่ด้วย '' (ช่องว่าง) อันนี้จะไม่ทำงาน: SELECT replace(columnA,'%[^a-Z0-9, ]%',' ') FROM tableA WHERE columnA like '%[^a-Z0-9, ]%'


1
ฐานข้อมูล SQL Server AlwaysOn ติดอยู่ในโหมดไม่ซิงโครไนซ์ / กำลังกู้คืนหลังจากอัปเกรด ข้อผิดพลาด: ไม่สามารถเปิดฐานข้อมูล '…' รุ่น 782
ขณะทดสอบการอัปเกรดจาก SQL Server 2014 SP1 (12.0.4422.0) เป็น SQL Server 2016 CTP 3.2 (13.0.900.73) ฉันทำตามกระบวนการอัปเดตที่แนะนำและพบปัญหาที่ฐานข้อมูลจะไม่เริ่มทำงานบนหลักเก่าหลังจากล้มเหลว ไปยังการปรับปรุงรอง การตั้งค่าของเราเป็นแบบจำลองหลักและแบบจำลองรองเดียวและขั้นตอนที่ฉันทำคือ: ลบ failover อัตโนมัติในแบบจำลองรองกระทำการซิงโครนัส อัพเกรดอินสแตนซ์ของเซิร์ฟเวอร์รองเป็นเวอร์ชันใหม่ ล้มเหลวด้วยตนเองไปยังแบบจำลองรอง ตรวจสอบว่าฐานข้อมูลออนไลน์แบบจำลองหลักใหม่ อัปเกรดเรพพลิกาหลักก่อนหน้าเป็นเวอร์ชันใหม่ การอัพเกรดของรองและ failover เพื่อให้มันทำงานหลักตรงตามที่คาดไว้ แต่หลังจากการอัพเกรดแบบจำลองก่อนหน้านี้หลักที่ผมสังเกตเห็นว่าฐานข้อมูลที่มันถูกระบุไว้ใน SSMS เป็นไม่ตรงกัน / ในการกู้คืน การพยายามเข้าถึงพวกมันจะสร้างข้อความแสดงข้อผิดพลาด: ฐานข้อมูล ... ไม่สามารถเข้าถึงได้ (ObjectExplorer) กำลังตรวจสอบถึงบันทึกของเซิร์ฟเวอร์ SQL ที่ฉันเห็น ไม่สามารถเปิดฐานข้อมูล '... ' เวอร์ชัน 782 อัปเกรดฐานข้อมูลเป็นเวอร์ชันล่าสุด การสอบถามตาราง master..sysdatabases แสดงให้เห็นว่ามันเป็นรุ่นที่เก่ากว่าและไม่ได้รับการอัพเดตในระหว่างการอัพเกรด: น่าเสียดายที่ล็อกไม่ได้ระบุว่าทำไมมันจึงไม่อัปเดตและแดชบอร์ดกลุ่มความพร้อมใช้งานให้เฉพาะคำเตือนทั่วไปที่ระบุสถานะการซิงโครไนซ์ข้อมูลของฐานข้อมูลความพร้อมใช้งานบางอย่างไม่แข็งแรงโดยไม่มีเหตุผล ฉันพยายามใช้ …

1
วิธีการทำซ้ำ“ ไม่สามารถสแกนด้วย NOLOCK ต่อเนื่องจากการเคลื่อนไหวของข้อมูล”
ฉันได้รับบางครั้ง "ไม่สามารถสแกนต่อNOLOCKเนื่องจากการเคลื่อนไหวของข้อมูล" กับงานขนาดใหญ่บางงานซึ่งมีWITH (NOLOCK)ในแบบสอบถามแบบใช้เลือกข้อมูล ฉันเข้าใจว่าสิ่งนี้เกี่ยวข้องกับการพยายามเลือกข้อมูลเมื่อมีการแบ่งหน้าซึ่งทำให้ข้อมูลไม่ได้อยู่ในที่ที่ควรจะเป็นอีกต่อไป - ฉันคิดว่าเป็นสิ่งที่เกิดขึ้นในสภาพแวดล้อมของฉัน ฉันจะทำสิ่งนี้ซ้ำได้อย่างไร ฉันพยายามหาวิธีแก้ปัญหาระยะสั้นเพื่อตรวจจับข้อผิดพลาดและลองใหม่เมื่อเกิดเหตุการณ์นี้ แต่ฉันไม่สามารถทดสอบได้หากฉันไม่สามารถทำซ้ำได้ มีวิธีที่เชื่อถือได้สมเหตุสมผลในการทำให้เกิดสิ่งนี้หรือไม่? เมื่อมันเกิดขึ้นการดำเนินการค้นหาผลลัพธ์อีกครั้งสำเร็จ - ดังนั้นฉันไม่มีข้อกังวลใด ๆ เกี่ยวกับข้อมูลจริงหรือฐานข้อมูลที่เสียหายอย่างถาวร บางตารางในแบบสอบถาม (พร้อมกับดัชนี) ลดลงสร้างใหม่และ repopulated บ่อยครั้งดังนั้นฉันคิดว่ามันเป็นสิ่งที่เกี่ยวข้อง การลบออกNOLOCKเป็นปัญหาระยะยาวของฉันที่จะจัดการกับ เหตุผลที่NOLOCKใส่ไว้ในตอนแรกก็คือการสืบค้นนั้นแย่มากจนพวกมันหยุดชะงักกับการทำธุรกรรมแบบวันต่อวันดังนั้นพวกเขาจึงNOLOCKช่วยกันหยุดการหยุดชะงัก (ซึ่งใช้ได้ผล) ดังนั้นฉันจึงต้องการความช่วยเหลือจากวงดนตรีในการช่วยเหลือแบบวงดนตรีจนกว่าเราจะสามารถแก้ปัญหาได้อย่างถาวร ถ้าฉันสามารถสร้างมันขึ้นมาใหม่ได้ด้วย Hello World ฉันจะวางแผนว่าจะตบวงช่วยเหลือเข้ากับงานในเวลาไม่ถึงหนึ่งชั่วโมง ไม่สามารถทำการลบ - ค้นหา - และ - แทนที่NOLOCKเพราะฉันเริ่มได้รับการหยุดชะงักของแอพอีกครั้งซึ่งแย่กว่าสำหรับฉันมากกว่างานที่ล้มเหลวเป็นครั้งคราว การใช้การแยกสแนปชอตแบบอ่านข้อมูลมุ่งมั่นเป็นไปได้ที่ดี - ฉันจะต้องทำงานกับทีมฐานข้อมูลของเราเพื่อรับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนั้น ปัญหาส่วนหนึ่งของเราคือเราไม่มีผู้เชี่ยวชาญ SQL Server ที่จะจัดการกับสิ่งนั้นและฉันไม่เข้าใจระดับการแยกได้ดีพอที่จะทำการเปลี่ยนแปลงในตอนนี้

2
สามารถกำหนดค่า / ใช้ sp_executesql เป็นค่าเริ่มต้นได้หรือไม่
ฉันกำลังดูแอปพลิเคชันที่ใช้การสืบค้น SQL แบบไดนามิกสูงกับ SQL Server ดูคำถามที่สร้างขึ้นด้วยวิธีที่แปลกและซับซ้อนมาก แต่นั่นเป็นเรื่องที่แตกต่างฉันบอกให้เหตุผลที่ดีสำหรับฉันที่ไม่สามารถ (โง่เกินไป) เพื่อค้นหาสิ่งต่าง ๆ ด้วยตัวเอง ... ฉันมองไม่เห็น รหัสใด ๆ sp_executesqlที่คำสั่งจะถูกห่อด้วย sp_executesqlแต่เมื่อผมติดตามฉันสามารถดูจำนวนมากของคำสั่งที่มาในห่อด้วย โซลูชันแอปพลิเคชันทั้งหมดไม่มีแม้แต่คำสั่งsp_executesqlเลย ดังนั้นฉันสงสัยว่ามีการกำหนดค่าชนิดใดที่ฉันยังไม่รู้ซึ่งบังคับให้ซอฟต์แวร์ตัดคำสั่งด้วย sp_executesql โดยค่าเริ่มต้นหรือไม่ สิ่งที่อาจทำให้เกิดพฤติกรรมนี้

3
อะไรคือการใช้การกู้คืนส่วนหัวเมื่อทำการสำรองข้อมูล?
เมื่อฉันตรวจสอบการสำรองข้อมูลของฉันด้วยแบบสอบถามต่อไปนี้: SELECT command, percent_complete, 'elapsed' = total_elapsed_time / 60000.0, 'remaining' = estimated_completion_time / 60000.0 FROM sys.dm_exec_requests WHERE command like 'BACKUP%' or command like 'RESTORE%' ฉันสังเกตว่าก่อนการสำรองข้อมูล SQL Server จะทำการคืนค่าส่วนหัวจากนั้นสำรองข้อมูล ฉันสงสัยว่ามีประโยชน์อะไรกับมันบ้างและถ้าเวลาในการประมวลผลลดลงอย่างใด ดูเหมือนจะใช้เวลานานกว่าการสำรองข้อมูลจริง

2
ELSE 0 บอกเป็นนัยในกรณี COUNT ของฉันเมื่อใด
ความแตกต่างระหว่างCOUNT(CASE WHEN [Column A] = ____ THEN 1 END และCOUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 ENDคืออะไร? ฉันใช้อดีตและฉันไม่ได้เห็นความแตกต่างในตอนนี้ เหตุผลในการเพิ่มELSE 0- มีสถานการณ์ที่ SQL Server จะนับอย่างไม่ถูกต้องหรือไม่

1
ไม่สามารถทำให้ SQLCMD ทำงานได้ไม่ว่าฉันจะพยายามทำอะไร
ไม่ว่าฉันจะทำอะไรฉันก็ไม่สามารถทำให้ SQLCMD ทำงานได้ ฉันพยายามเรียกใช้สคริปต์ที่มีขนาด 200mb + และไม่สามารถเรียกใช้จากแอปพลิเคชันเซิร์ฟเวอร์ sql ได้ดังนั้นฉันต้องดำเนินการผ่าน SQLCMD อย่างไรก็ตามทุกครั้งที่ฉันพยายามลงชื่อเข้าใช้หรือเรียกใช้สคริปต์สคริปต์จะปิดทันที ฉันได้ติดตามยูทิลิตี้ sqlcmd โดย msdn ฉันพยายามที่จะเปิดมันผ่านคำสั่งที่เชื่อถือได้ SQLCMD -EI รับ: Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. . Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : …

4
FIRST () และ LAST () รุ่น SQL Server 2012 คืออะไร
ฉันมีตารางที่มีvalueคอลัมน์ ฉันต้องการคำนวณแถวสุดท้ายลบด้วยแถวแรกดังที่แสดงที่นี่: id value 1 10 2 45 3 65 4 95 . . . . . . 500 200 ฉันต้องการได้รับ 200 - 10 = 190 ฉันพยายามใช้คำสั่งด้านล่างใน SQL Server 2012 อย่างไรก็ตามLASTและFIRSTไม่ทำงาน SELECT LAST(Value) - FIRST(Value) FROM Counter; ไวยากรณ์สำหรับคำสั่งนี้ใน SQL Server คืออะไร

1
คอลัมน์“ อ่าน” ใน sys.dm_exec_sessions จริง ๆ บ่งชี้อะไร
นี่อาจดูเหมือนคำถามพื้นฐานมากและแน่นอนควรเป็นเช่นนั้น อย่างไรก็ตามในฐานะแฟนของวิธีการทางวิทยาศาสตร์ฉันชอบที่จะสร้างสมมติฐานแล้วทดสอบเพื่อดูว่าฉันถูกต้อง ในกรณีนี้ฉันพยายามทำความเข้าใจกับผลลัพธ์ของsys.dm_exec_sessionsและโดยเฉพาะคอลัมน์ "อ่าน" SQL Server Books Online ค่อนข้างจะระบุว่าเป็น: จำนวนการอ่านที่ดำเนินการตามคำขอในเซสชันนี้ในระหว่างเซสชันนี้ ไม่เป็นโมฆะ หนึ่งอาจสันนิษฐานว่าสิ่งนี้จะบ่งบอกถึงจำนวนหน้าอ่านจากดิสก์เพื่อตอบสนองการร้องขอที่ออกโดยเซสชั่นนี้ตั้งแต่เริ่มต้นของเซสชั่น นี่คือสมมติฐานที่ฉันคิดว่าฉันจะทดสอบ logical_readsคอลัมน์ในตารางเดียวกันกับที่มีการกำหนดเป็น: จำนวนการอ่านโลจิคัลที่ดำเนินการบนเซสชัน ไม่เป็นโมฆะ จากประสบการณ์ที่ใช้ SQL Server ผมเชื่อว่าคอลัมน์นี้สะท้อนให้เห็นถึงจำนวนของหน้าเว็บที่ได้รับการอ่านทั้งจากดิสก์และในหน่วยความจำ กล่าวอีกนัยหนึ่งจำนวนหน้าทั้งหมดที่เคยอ่านจากเซสชันไม่ว่าหน้านั้นจะอยู่ที่ใด ความแตกต่างหรือข้อเสนอคุณค่าของการมีสองคอลัมน์แยกต่างหากที่ให้ข้อมูลที่คล้ายกันดูเหมือนจะเป็นที่หนึ่งที่สามารถเข้าใจอัตราส่วนของหน้าอ่านจากดิสก์ ( reads) เทียบกับที่อ่านจากแคชแคช ( logical_reads) สำหรับเซสชั่นที่เฉพาะเจาะจง บนอุปกรณ์ทดสอบของฉันฉันได้สร้างฐานข้อมูลใหม่สร้างตารางเดียวที่มีจำนวนหน้าข้อมูลที่รู้จักแล้วอ่านตารางนั้นในเซสชันใหม่ จากนั้นฉันดูsys.dm_exec_sessionsเพื่อดูสิ่งที่readsและlogical_readsคอลัมน์พูดเกี่ยวกับเซสชัน ณ จุดนี้ฉันรู้สึกสับสนกับผลลัพธ์ บางทีบางคนที่นี่สามารถหลั่งน้ำตาให้ฉัน อุปกรณ์ทดสอบ: USE master; IF EXISTS (SELECT 1 FROM sys.databases d WHERE d.name = 'TestReads') BEGIN ALTER DATABASE …

3
แอปพลิเคชันสอบถามตารางที่ว่างเปล่า
บริษัท ของฉันใช้แอปพลิเคชันที่มีปัญหาด้านประสิทธิภาพที่สำคัญ มีปัญหาหลายอย่างเกี่ยวกับฐานข้อมูลของตัวเองซึ่งฉันกำลังอยู่ในขั้นตอนการทำงาน แต่มีปัญหามากมายที่เกี่ยวข้องกับการใช้งานอย่างแท้จริง ในการตรวจสอบของฉันฉันพบว่ามีล้านแบบสอบถามกดปุ่มฐานข้อมูล SQL Server ซึ่งแบบสอบถามตารางที่ว่างเปล่า เรามีตารางว่างเปล่าประมาณ 300 ตารางและบางตารางมีการสอบถามถึง 100-200 ครั้งต่อนาที ตารางไม่มีส่วนเกี่ยวข้องกับธุรกิจของเราและเป็นส่วนหนึ่งของแอปพลิเคชันดั้งเดิมซึ่งผู้ขายไม่ได้ลบเมื่อ บริษัท ของฉันทำสัญญาเพื่อผลิตโซลูชันซอฟต์แวร์สำหรับเรา นอกเหนือจากข้อเท็จจริงที่ว่าเราสงสัยว่าบันทึกข้อผิดพลาดแอปพลิเคชันของเรากำลังถูกน้ำท่วมด้วยข้อผิดพลาดที่เกี่ยวข้องกับปัญหานี้ผู้จัดจำหน่ายมั่นใจกับเราว่าไม่มีประสิทธิภาพหรือเสถียรภาพด้านผลกระทบสำหรับทั้งแอปพลิเคชันหรือเซิร์ฟเวอร์ฐานข้อมูล บันทึกข้อผิดพลาดมีน้ำท่วมจนเราไม่สามารถเห็นข้อผิดพลาดเกินกว่า 2 นาทีในการวินิจฉัย ค่าใช้จ่ายจริงของข้อความค้นหาเหล่านี้เห็นได้ชัดว่าอยู่ในระดับต่ำในแง่ของรอบการทำงานของ CPU เป็นต้น แต่ใครก็ตามสามารถแนะนำสิ่งที่มีผลต่อ SQL Server และแอปพลิเคชันได้บ้าง ฉันสงสัยว่ากลไกที่แท้จริงของการส่งคำขอยืนยันดำเนินการส่งคืนและยอมรับการรับแอปพลิเคชันนั้นจะส่งผลกระทบต่อประสิทธิภาพการทำงาน เราใช้ SQL Server 2008 R2, Oracle Weblogic 11g สำหรับแอป @ Frisbee- เรื่องสั้นสั้นฉันสร้างตารางที่มี querytext ซึ่งตีตารางที่ว่างเปล่าในฐานข้อมูลของแอพจากนั้นทำการสอบถามสำหรับ tablenames ทั้งหมดที่ฉันรู้ว่าว่างเปล่าและมีรายการที่ยาวมาก สิ่งที่ฮิตที่สุดคือการประหารชีวิต 2.7 ล้านครั้งในช่วงเวลา 30 วันโดยคำนึงถึงแอปที่ใช้กันทั่วไป 8 …

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