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

SQL Server 2012 (รุ่นบิลด์หลัก 11.00.xxxx) โปรดติดแท็ก sql-server ด้วย

1
ลำดับ - ไม่มีแคชเทียบกับ CACHE 1
มีความแตกต่างระหว่างการSEQUENCEประกาศใช้NO CACHEและประกาศใช้CACHE 1ใน SQL Server 2012+? ลำดับ # 1: CREATE SEQUENCE dbo.MySeqCache1 AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE CACHE 1; GO ลำดับ # 2: CREATE SEQUENCE dbo.MySeqNoCache AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE NO …

3
พฤติกรรมแปลก ๆ พร้อมขนาดตัวอย่างสำหรับการอัพเดทสถิติ
ฉันได้รับการตรวจสอบเกณฑ์การสุ่มตัวอย่างด้วยการปรับปรุงสถิติใน SQL Server (2012) และสังเกตเห็นพฤติกรรมที่น่าสงสัย โดยทั่วไปจำนวนแถวตัวอย่างที่ดูเหมือนจะแตกต่างกันภายใต้สถานการณ์บางอย่าง - แม้จะมีชุดข้อมูลเดียวกัน ฉันเรียกใช้แบบสอบถามนี้: --Drop table if exists IF (OBJECT_ID('dbo.Test')) IS NOT NULL DROP TABLE dbo.Test; --Create Table for Testing CREATE TABLE dbo.Test(Id INT IDENTITY(1,1) CONSTRAINT PK_Test PRIMARY KEY CLUSTERED, TextValue VARCHAR(20) NULL); --Insert enough data so we have more than 8Mb (the threshold at …

3
คีย์ธรรมชาติให้ประสิทธิภาพที่สูงขึ้นหรือต่ำลงใน SQL Server มากกว่าปุ่มจำนวนเต็มตัวแทน?
ฉันเป็นแฟนของกุญแจตัวแทน มีความเสี่ยงที่การค้นพบของฉันจะยืนยันลำเอียง คำถามมากมายที่ฉันเห็นทั้งที่นี่และที่http://stackoverflow.comใช้คีย์ธรรมชาติแทนคีย์ตัวแทนโดยยึดตามIDENTITY()ค่า พื้นหลังของฉันในระบบคอมพิวเตอร์บอกให้ฉันดำเนินการเปรียบเทียบใด ๆ กับจำนวนเต็มจะเร็วกว่าการเปรียบเทียบสตริง ความคิดเห็นนี้ทำให้ฉันถามความเชื่อของฉันดังนั้นฉันคิดว่าฉันจะสร้างระบบเพื่อตรวจสอบวิทยานิพนธ์ของฉันว่าจำนวนเต็มเร็วกว่าสตริงเพื่อใช้เป็นกุญแจใน SQL Server เนื่องจากมีความแตกต่างที่สังเกตได้น้อยมากในชุดข้อมูลขนาดเล็กฉันจึงนึกถึงการตั้งค่าตารางสองตารางทันทีที่ตารางหลักมี 1,000,000 แถวและตารางรองมี 10 แถวสำหรับแต่ละแถวในตารางหลักรวม 10,000,000 แถวใน ตารางที่สอง ข้อสมมติฐานของการทดสอบของฉันคือการสร้างตารางสองชุดเช่นนี้ชุดหนึ่งใช้คีย์ธรรมชาติและอีกชุดหนึ่งใช้คีย์จำนวนเต็มและเรียกใช้การทดสอบกำหนดเวลากับคำถามง่ายๆเช่น: SELECT * FROM Table1 INNER JOIN Table2 ON Table1.Key = Table2.Key; ต่อไปนี้เป็นรหัสที่ฉันสร้างเป็นเตียงทดสอบ: USE Master; IF (SELECT COUNT(database_id) FROM sys.databases d WHERE d.name = 'NaturalKeyTest') = 1 BEGIN ALTER DATABASE NaturalKeyTest SET SINGLE_USER …

2
จำนวนการเชื่อมต่อผู้ใช้สูงสุด
ในรุ่นมาตรฐาน SQL Server 2012 ฉันรู้ว่าจำนวนการเชื่อมต่อผู้ใช้สูงสุดคือ 32,767 ฉันควรทำอย่างไรในฐานะ DBA ถ้าฉันมุ่งหน้าไปยังหมายเลขนี้ ขณะนี้มีการเชื่อมต่อกับผู้ใช้ 30,000 รายและคาดว่าจำนวนนี้จะเพิ่มขึ้น

9
ทดสอบว่าสตริงเป็น palindrome โดยใช้ T-SQL
ฉันเป็นผู้เริ่มต้นใน T-SQL ฉันต้องการตัดสินใจว่าสตริงอินพุตเป็น palindrome โดยมีเอาต์พุต = 0 หากไม่ใช่และ output = 1 หากเป็น ฉันยังคงหาไวยากรณ์ ฉันไม่ได้รับข้อความแสดงข้อผิดพลาด ฉันกำลังมองหาวิธีแก้ไขปัญหาที่แตกต่างกันและข้อเสนอแนะบางอย่างเพื่อให้ได้ความเข้าใจและความรู้ที่ดีขึ้นเกี่ยวกับวิธีการทำงานของ T-SQL เพื่อให้ทำงานได้ดีขึ้น - ฉันยังเป็นนักเรียนอยู่ ความคิดหลักที่ฉันเห็นคือการเปรียบเทียบอักขระซ้าย - ขวา - ส่วนใหญ่กับแต่ละอื่น ๆ เพื่อตรวจสอบความเท่าเทียมกันจากนั้นไปเปรียบเทียบอักขระที่สองจากด้านซ้ายกับอักขระ 2 จากซ้ายและสุดท้าย เราวนซ้ำ: ถ้าตัวละครมีค่าเท่ากันเราจะดำเนินการต่อ ถ้าเราถึงจุดสิ้นสุดเราจะเอาท์พุท 1 ถ้าไม่เราก็เอาท์พุท 0 คุณช่วยวิจารณ์ได้ไหม: CREATE function Palindrome( @String Char , @StringLength Int , @n Int , @Palindrome BIN , …

2
'CONCAT' ไม่ใช่ชื่อฟังก์ชันในตัวที่ได้รับการยอมรับ
ลูกค้ารายงานว่าพวกเขากำลังทำงานบน SQL Server 2012 และเราได้ส่งแบบสอบถามทดสอบสำหรับการทดสอบก่อนส่งมอบครั้งสุดท้ายอย่างไรก็ตาม: 'CONCAT' ไม่ใช่ชื่อฟังก์ชันในตัวที่ได้รับการยอมรับ ฉันเข้าใจว่าCONCAT()เป็นฟังก์ชันในตัวใหม่ที่นำมาใช้ใน SQL Server 2012 ซึ่งดีและดี แต่ฉันถูกขอให้ย้อนกลับการเปลี่ยนแปลงของฉันเพื่อให้ 2008R2 นี้เข้ากันได้ภายใต้หน้ากากของ "ผู้ใช้ที่ดำเนินการแบบสอบถามอาจไม่ มีสิทธิ์ Transact-SQL ในการดำเนินการ " ดังนั้นฉันแค่พิสูจน์จุดของฉันว่าไคลเอนต์ส่วนใหญ่มี SQL Server รุ่นอื่นติดตั้งใน DEV มากกว่าที่พวกเขาทำใน PROD ฉันไม่สามารถหาข้อมูลใด ๆ เกี่ยวกับการปฏิเสธการSELECT/EXECUTEอนุญาตโดยเฉพาะสำหรับฟังก์ชั่นที่มีมูลค่าสเกลาร์ในตัว แต่เป็นไปได้และถ้าเป็นเช่นนั้นผู้ใช้จะยังได้รับข้อความแสดงข้อผิดพลาดเดียวกันหรือไม่

4
SQL Server Management studio ช้าหรือหมดเวลาเชื่อมต่อเมื่อใช้ Windows Authentication
ฉันได้รับความล่าช้านานมาก (10 ~ 30 วินาที) ในสตูดิโอของ SQL Server 2014 การจัดการเมื่อพยายามที่จะเชื่อมต่อกับ 2012 อินสแตนซ์ของ SQL Server ผ่าน TCP ใช้Windows ตรวจสอบ สิ่งนี้เกิดขึ้นเมื่อเชื่อมต่อ Object Explorer หรือหน้าต่างแบบสอบถามว่างเปล่าใหม่ เมื่อเชื่อมต่อแล้วการเรียกใช้แบบสอบถามจะรวดเร็ว ปัญหาไม่เกิดขึ้นเมื่อฉันเชื่อมต่อโดยใช้การพิสูจน์ตัวตน SQL Server สิ่งแวดล้อม: Windows 7 เข้าสู่ระบบในฐานะผู้ใช้โดเมน การเชื่อมต่อ TCP ผ่านที่อยู่ IP (ไม่ใช่ชื่อโฮสต์) เซิร์ฟเวอร์อยู่ในสถานที่ห่างไกลที่เชื่อมต่อผ่าน VPN ไม่มีการเข้ารหัส เมื่อฉันเข้าสู่คอมพิวเตอร์ Windows 7 ของเพื่อนร่วมงานด้วยบัญชีโดเมนของฉันและเชื่อมต่อกับ SQL Server เดียวกันผ่าน VPN เดียวกันก็ไม่มีความล่าช้า เมื่อเพื่อนร่วมงานคนเดียวกันลงชื่อเข้าใช้พีซีของฉันด้วยบัญชีโดเมนของเขาเองเขาประสบความล่าช้า การทดสอบเหล่านี้แสดงว่าปัญหานั้นไม่เหมือนใครในพีซีของฉัน นอกจากนี้ปัญหาจะปรากฏเฉพาะเมื่อเชื่อมต่อกับ …

3
ตัดทอนตาราง 200GB แต่พื้นที่ดิสก์ไม่ออก
ฉันเหลือเพียง 2GB ดังนั้นฉันต้องลบตารางประวัตินี้ ตารางนี้ในขณะนี้ว่างเปล่า แต่พื้นที่ดิสก์ฐานข้อมูลไม่ออก และไฟล์ฐานข้อมูล 320GB

5
วิธีสร้างคำหลักตัวพิมพ์ใหญ่ SSMS
ฉันเพิ่งเริ่มใช้ Studio จัดการ 2012 เมื่อใช้ MySQL Workbench เป็นคุณสมบัติที่มีประโยชน์คือการที่ฉันสามารถอยู่ทั้งหมดในกรณีที่ต่ำกว่าและคำสงวนใด ๆ (เช่นSELECT, INSERT) จะแปลงเป็นกรณีบนโดยอัตโนมัติ ฉันจะทำซ้ำพฤติกรรมนี้ใน SSMS ได้อย่างไร

2
SQL Server อ่านแล้วยอมรับ SNAPSHOT กับ SNAPSHOT
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 6 ปีที่แล้ว ฉันค้นคว้าความแตกต่างระหว่าง SQL Server READ COMMITTED SNAPSHOTและSNAPSHOTระดับการแยกและพบกับทรัพยากรต่อไปนี้: การเลือกระดับการแยกตามเวอร์ชันของแถว สำหรับแอปพลิเคชันส่วนใหญ่ขอแนะนำให้อ่านการแยกโดยใช้การกำหนดเวอร์ชันของแถวมากกว่าการแยกสแน็ปช็อตด้วยเหตุผลต่อไปนี้: มันใช้พื้นที่ tempdb น้อยกว่าการแยกสแน็ปช็อต การแยกสแนปชอตมีความเสี่ยงที่จะอัปเดตความขัดแย้งที่ไม่สามารถใช้งานได้กับการอ่านแบบแยกที่มุ่งมั่นโดยใช้การกำหนดเวอร์ชันของแถว เมื่อธุรกรรมที่รันภายใต้การแยกสแน็ปช็อตอ่านข้อมูลที่ถูกแก้ไขโดยธุรกรรมอื่นการอัพเดตโดยธุรกรรมสแน็ปช็อตไปยังข้อมูลเดียวกันทำให้เกิดความขัดแย้งในการอัปเดตและธุรกรรมจะสิ้นสุดและย้อนกลับ นี่ไม่ใช่ปัญหาของการแยกการอ่านโดยใช้การกำหนดเวอร์ชันของแถว ฉันค่อนข้างใหม่สำหรับหัวข้อเหล่านี้ แต่ดูเหมือนว่าฉันไม่สามารถเข้าใจหัวข้อย่อยทั้งสองจากลิงก์ด้านบน ทำไมพื้นที่ tempdb จะแตกต่างกันสำหรับโหมดเหล่านี้ มีร้านหนึ่งที่ควบคุมเวอร์ชันย่อยได้มากกว่าร้านอื่นหรือไม่ ทำไมการแยกสแน็ปช็อตจึงมีความเสี่ยงที่จะอัปเดตข้อขัดแย้ง

1
ทำไม 0 เท่ากับสตริงที่ว่างเปล่า?
ฉันต้องการความช่วยเหลือในการค้นหาสาเหตุที่T-SQLคำสั่งต่อไปนี้ส่งคืน1(จริง): SELECT IIF( 0 = '', 1, 0) ฉันเดาว่ามีคนเปลี่ยนตัวANSIเลือกที่ชอบSET ANSI_NULLSหรืออย่างอื่นที่ทำให้เกิดพฤติกรรม ปัญหาของฉันคือฉันเข้าร่วมค่าบางอย่างและในชุดแถวสุดท้ายฉันมีค่าที่เข้าร่วม0และ''ค่าซึ่งไม่ถูกต้อง

1
เมื่อใดควรใช้ sort_in_tempdb เมื่อสร้างดัชนีใหม่
เรากำลังถกเถียงกันว่าจะใช้ตัวเลือก SORT_IN_TEMPDB สำหรับตาราง DW ของเราหรือไม่ ความเข้าใจของฉันคือว่ามีการเขียนเพิ่มเติมเมื่อใช้ตัวเลือกนี้แม้ว่าพวกเขาจะเรียงตามลำดับมากขึ้น เรามี SAN (ซึ่งช้ามากในบางครั้ง) ดังนั้นในกรณีของเราเราต้องการ จำกัด จำนวนการเขียนให้มากที่สุด ฉันเชื่อว่า tempdb อยู่ใน LUN แยกต่างหาก (ชุดของดิสก์) เรามีพื้นที่ดิสก์มากมายในไฟล์ข้อมูลและไฟล์ tempdb ของเรา ในกรณีนี้เราจะได้ประโยชน์จากการใช้ SORT_IN_TEMPDB ไหม สิ่งหนึ่งที่ทำให้ฉันรู้สึกแย่คือความเห็นต่อคำตอบนี้ เมื่อสร้างดัชนีใหม่คุณจะต้องมีพื้นที่ว่างสองเท่าของดัชนี + 20% สำหรับการเรียงลำดับ โดยทั่วไปแล้วการสร้างดัชนีทุกครั้งในฐานข้อมูลของคุณคุณต้องการเพียง 120% ของดัชนีที่ใหญ่ที่สุดในฐานข้อมูลของคุณ หากคุณใช้ SORT_IN_TEMPDB คุณจะได้รับเพียง 20% คุณยังคงต้องการ aditional 100% ในไฟล์ข้อมูลของคุณ ยิ่งไปกว่านั้นการใช้ sort in tempdb จะเพิ่มการโหลด IO ของคุณอย่างมากเนื่องจากแทนที่จะเขียนดัชนีหนึ่งครั้งไปยัง datafile ตอนนี้คุณเขียนมันหนึ่งครั้งไปยัง tempdb …

4
มีวิธีสร้างตารางสร้างสคริปต์ใน TSQL หรือไม่?
มีวิธีสร้างสคริปต์สร้างจากตารางที่มีอยู่ใน T-SQL (โดยไม่ใช้ SMO เนื่องจาก T-SQL ไม่สามารถเข้าถึง SMO ได้) สมมติว่าเป็นกระบวนงานที่เก็บไว้ที่รับชื่อตารางและส่งคืนสตริงที่มีสคริปต์สร้างสำหรับตารางที่กำหนดหรือไม่ ตอนนี้ให้ฉันอธิบายสถานการณ์ที่ฉันกำลังเผชิญเนื่องจากอาจมีวิธีอื่นในการเข้าถึงสิ่งนี้ ฉันมีอินสแตนซ์ที่มีฐานข้อมูลหลายโหล ฐานข้อมูลเหล่านี้ทั้งหมดมีสคีมาเหมือนกันทั้งหมดตารางเดียวกันดัชนีและอื่น ๆ พวกเขาถูกสร้างขึ้นเป็นส่วนหนึ่งของการติดตั้งซอฟต์แวร์บุคคลที่สาม ฉันต้องมีวิธีในการทำงานกับพวกเขาเพื่อให้ฉันสามารถรวบรวมข้อมูลจากพวกเขาในลักษณะเฉพาะกิจ ผู้คนที่ดีที่ dba.se ได้ช่วยฉันที่นี่แล้วจะสร้างทริกเกอร์ในฐานข้อมูลอื่นได้อย่างไร ขณะนี้ฉันต้องการค้นหาวิธีการเลือกจากตารางในฐานข้อมูลทั้งหมด ฉันได้บันทึกชื่อฐานข้อมูลทั้งหมดลงในตารางที่เรียกDatabaseesและฉันเขียนสคริปต์ต่อไปนี้เพื่อดำเนินการคำสั่งที่เลือกในพวกเขาทั้งหมด: IF OBJECT_ID('tempdb..#tmp') IS NOT NULL DROP TABLE #tmp select * into #tmp from Database1.dbo.Table1 where 1=0 DECLARE @statement nvarchar(max) = N'insert into #tmp select * from Table1 where Column1=0 …

1
ทำไม SQL Server 2012 Express ใช้ RAM 9.5GB บนเซิร์ฟเวอร์ของฉัน
ฉันกำลังสร้างแอปพลิเคชันที่ฉันวางแผนจะฝัง SQL Server 2012 Express เป็นที่เก็บข้อมูลหลัก เมื่อทำการทดสอบบนเครื่องพัฒนาของฉัน (Win7-32 ​​ที่มี RAM 3GB) ฉันไม่เคยสังเกตว่าsqlservr.exeกระบวนการใช้ RAM มากกว่า 1GB อย่างที่ฉันคาดไว้จากการจำกัด ขนาดของฮาร์ดแวร์ที่เผยแพร่สำหรับ SQL Server รุ่น Express จากนั้นฉันย้ายแอปพลิเคชันของฉันไปยังเครื่องระดับเซิร์ฟเวอร์ (Win Server 2008R2 64- บิตพร้อม RAM 16GB) เพื่อประเมินประสิทธิภาพการทำงานที่นั่นและรู้สึกประหลาดใจที่พบว่าsqlservr.exeกระบวนการขยายอย่างรวดเร็วไปเป็นแรม 9.5GB และอยู่ที่นั่น ฉันรีสตาร์ทสองสามครั้งเพื่อดูว่าจะมีผลกระทบใด ๆ หรือไม่ แต่ในแต่ละครั้งกระบวนการจะกลับไปที่ ~ 9.5GB อย่างรวดเร็ว ตอนนี้ฉันรู้สึกยินดีอย่างยิ่งที่มี SQL Server Express ใช้ RAM ของฉัน แต่ฉันอยากจะรู้ว่านี่เป็นพฤติกรรมที่คาดหวังหรือไม่ดังนั้นฉันจึงไม่ต้องพึ่งพาระดับประสิทธิภาพที่ขึ้นอยู่กับการใช้ RAM ที่ไม่ถูกต้อง FYI …

1
เหตุใดจึงสร้างดัชนี ... ด้วยออนไลน์ = บล็อกการเข้าถึงตารางในช่วงเวลาไม่กี่นาที
ฉันมีตารางที่มีอยู่: CREATE TABLE dbo.ProofDetails ( ProofDetailsID int NOT NULL CONSTRAINT PK_ProofDetails PRIMARY KEY CLUSTERED IDENTITY(1,1) , ProofID int NULL , IDShownToUser int NULL , UserViewedDetails bit NOT NULL CONSTRAINT DF_ProofDetails_UserViewedDetails DEFAULT ((0)) ); ตารางนี้มี 150,000,000 แถว ระบบกำลังทำงาน 24x7x365 ดังนั้นจึงไม่มีหน้าต่างการบำรุงรักษาที่เกิดขึ้นเป็นประจำ ฉันต้องการเพิ่มดัชนีลงในตารางและด้วย Enterprise Edition ของ SQL Server ฉันควรจะทำเช่นนั้นได้โดยไม่ปิดกั้นการเข้าถึงการเขียนลงในตาราง คำสั่งที่ฉันใช้คือ: CREATE INDEX IX_ProofDetails_ProofID_Etc …

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