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

Transact-SQL (T-SQL) เป็นภาษาถิ่นของ SQL ที่ใช้โดย Microsoft SQL Server และ Sybase ของ SAP

1
N'Șc 'พิจารณาคีย์ที่ซ้ำกันของ N'C' โดยใช้การเปรียบเทียบ Latin1_General_CI_AS
ฉันมีตารางที่มีคีย์เฉพาะที่มีNVARCHAR(50)คอลัมน์ (ถูกต้องหรือไม่ แต่มีอยู่) ดังนั้นเมื่อพยายามที่จะแทรกȘcหรือC(ไม่สำคัญกับคำสั่งของเม็ดมีด) มันจะแตกบนเม็ดที่สองเนื่องจากปัญหาการเรียง นี่คือข้อผิดพลาด: (รับผลกระทบ 1 แถว) ข่าวสารเกี่ยวกับ 2601, ระดับ 14, สถานะ 1, บรรทัดที่ 16 ไม่สามารถแทรกแถวคีย์ซ้ำในวัตถุ 'dbo.testT' ด้วยดัชนีเฉพาะ 'IX_TestT' ค่าคีย์ที่ซ้ำกันคือ (C) เลือกผลตอบแทน: Latin1_General_CI_ASเปรียบเทียบค่าเริ่มต้นฐานข้อมูลเป็น ใช้เวลาดูวิธีการแก้ปัญหาโดยไม่ต้องเปลี่ยนโครงสร้างที่มีอยู่แล้ว แต่ไม่สามารถหาวิธีทำงานได้ พยายามเรียงความและรวมที่แตกต่างกันทุกอย่างล้มเหลว อ่าน ( ที่นี่และที่นี่ ) เกี่ยวกับการขยายตัวอักขระและอื่น ๆ ยังคงติดอยู่ นี่คือตัวอย่างรหัสที่ฉันใช้เพื่อทำซ้ำปัญหารู้สึกฟรีเพื่อแก้ไขและแนะนำสิ่งที่สามารถช่วยแก้ปัญหานี้ได้ CREATE TABLE testT ( [Default_Collation] [NVARCHAR] (50) COLLATE DATABASE_DEFAULT, [Latin1_General_CI_AS] [NVARCHAR] (50) COLLATE Latin1_General_CI_AS, …

5
วิธีการมีมากกว่า 100 รายการในคำสั่ง case เป็นตัวแปร
ฉันเขียนคำสั่ง case ด้วยตัวเลือกมากกว่า 100 ตัวเลือกซึ่งฉันใช้คำสั่งเดียวกันใน 4 แห่งในการค้นหาแบบง่าย แบบสอบถามเดียวกันสองครั้งที่มีการรวมกันระหว่างพวกเขา แต่ยังมีการนับและดังนั้นกลุ่มโดยยังมีคำสั่งกรณี นี่คือการติดฉลากชื่อ บริษัท บางรายการที่มีการสะกดคำที่แตกต่างกันสำหรับ บริษัท เดียวกันต่างกัน ฉันพยายามประกาศตัวแปรเป็น VarChar (MAX) declare @CaseForAccountConsolidation varchar(max) SET @CaseForAccountConsolidation = 'CASE WHEN ac.accountName like ''AIR NEW Z%'' THEN ''AIR NEW ZEALAND'' WHEN ac.accountName LIKE ''AIR BP%'' THEN ''AIR BP'' WHEN ac.accountName LIKE ''ADDICTION ADVICE%'' THEN ''ADDICTION ADVICE'' …

2
วิธีการอ่านโค้ด HTML เป็น XML และรับผลเช่นเดียวกับตัวอย่างใน sql?
ฉันมีรหัส HTML เก็บไว้ในฐานข้อมูลและฉันต้องการอ่านมันเป็น XML รหัสของฉัน: http://rextester.com/RMEHO89992 นี่คือตัวอย่างของรหัส HTML ที่ฉันมี: <div> <section> <h4> <span> A </span> </h4> <ul> <li> <span> Ab</span> AD <span> AC </span> </li> <li> <span> Ag</span> <span> AL </span> </li> </ul> <h4> <span> B </span> </h4> <ul> <li> <span> Bb</span> BD <span> BC </span> </li> <li> <span> Bg</span> …
11 sql-server  t-sql  xml 

4
จำนวนตัวแปรท้องถิ่นที่สามารถมีส่วนร่วมในการดำเนินงานของตลาดหลักทรัพย์สูงสุดคือเท่าไร
ฉันมีขั้นตอนการจัดเก็บที่มีตรรกะทางธุรกิจ ข้างในนั้นฉันมีตัวแปรประมาณ 1609 (อย่าถามฉันว่าทำไมนี่คือวิธีการทำงานของเครื่องยนต์) ฉันพยายามSETตัวแปรหนึ่งตัวต่อค่าที่เชื่อมโยงกันของตัวแปรอื่นทั้งหมด เป็นผลในระหว่างการสร้างฉันได้รับข้อผิดพลาด: ข่าวสารเกี่ยวกับ 8631, ระดับ 17, สถานะ 1, กระบวนงาน XXX, บรรทัด YYY ข้อผิดพลาดภายใน: ถึงขีด จำกัด สแต็กเซิร์ฟเวอร์แล้ว โปรดค้นหาการซ้อนที่อาจเกิดขึ้นในแบบสอบถามของคุณและพยายามทำให้มันง่ายขึ้น ฉันพบว่าข้อผิดพลาดเกิดจากจำนวนตัวแปรที่ฉันต้องใช้ในการSETดำเนินการ ฉันสามารถทำงานที่มอบหมายโดยแยกออกเป็นสองส่วน คำถามของฉันมีข้อ จำกัด บางประการในเรื่องนี้หรือไม่? ฉันตรวจสอบแล้ว แต่ไม่พบสิ่งใด เราตรวจสอบข้อผิดพลาดที่อธิบายในKBนี้ แต่นี่ไม่ใช่กรณีของเรา เราไม่ใช้CASEการแสดงออกใด ๆภายในรหัสของเรา เราใช้ตัวแปรชั่วคราวนั้นเพื่อเตรียมรายการค่าที่ต้องถูกแทนที่โดยใช้ฟังก์ชัน CLR เราอัปเดต SQL Server เป็น SP3 CU6 (รุ่นล่าสุด) แต่เรายังคงพบข้อผิดพลาด

10
วิธีสร้างซีรีย์ 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, ... ใน SQL มาตรฐานหรือ T-SQL
ด้วยตัวเลขสองตัวnและmฉันต้องการสร้างชุดของแบบฟอร์ม 1, 2, ..., (n-1), n, n, (n-1), ... 2, 1 และทำซ้ำmครั้ง ตัวอย่างเช่นสำหรับn = 3และm = 4ฉันต้องการลำดับหมายเลข 24 ต่อไปนี้: 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1 ---------------- ---------------- ---------------- ---------------- ฉันรู้วิธีการบรรลุผลลัพธ์นี้ใน PostgreSQL โดยวิธีใดวิธีหนึ่งจากสองวิธี: …

1
CASE expression ส่งคืนค่าที่ผิดเมื่อใช้ CEILING
ฉันพบปัญหาที่CASEนิพจน์ไม่ส่งคืนสิ่งที่ฉันคาดหวัง ในการทดสอบฉันเพิ่มตัวแปรทศนิยมและใช้CASEนิพจน์เดียวกันกับมันและใช้งานได้ดีส่งคืนผลลัพธ์ตามที่คาดไว้ (ปัดเศษค่าขึ้นเมื่อIsGun=1แต่เมื่อฉันเรียกใช้CASEนิพจน์เดียวกันกับค่าทศนิยมอื่นมันจะส่งกลับเสมอ ค่าที่มีCEILING()ฟังก์ชั่นและจะไม่ส่งคืนค่าเดิม นี่คือรหัส SQL: DECLARE @Num decimal(8,2); set @Num = 12.54; WITH PQ AS ( SELECT UPC, Price1, DBID, AVG(Price1) OVER (PARTITION BY UPC) AS Price1Avg FROM vProducts_PriceQty_Union ) SELECT PQ.UPC, PQ.Price1, PQ.Price1Avg, (CASE WHEN p.IsGun = 1 THEN CEILING(@Num) ELSE @Num END) AS UsingVar, CAST( (CASE WHEN …

4
'Id' ที่มีรูปแบบ: YYYYNNNNNN ที่มีส่วน NNNNNN เริ่มต้นใหม่ทุกปี
ฉันมีข้อกำหนดทางธุรกิจที่แต่ละระเบียนในตารางใบแจ้งหนี้มีรหัสซึ่งดูเหมือน YYYYNNNNNNN ส่วน NNNNNN จำเป็นต้องเริ่มต้นใหม่ทุกต้นปี ดังนั้นแถวแรกที่ป้อนในปี 2559 จะมีลักษณะเป็น 2016000001 และแถวที่สองเช่น 2016000002 ฯลฯ ให้บอกว่าระเบียนสุดท้ายของปี 2559 คือ 2016123456 แถวถัดไป (ของปี 2017) ควรมีลักษณะเหมือน 2017000001 ฉันไม่ต้องการรหัสนี้เป็นคีย์หลักและฉันเก็บวันที่สร้างเช่นกัน แนวคิดคือ 'รหัสแสดง' นี้ไม่ซ้ำกัน (ดังนั้นฉันจึงสามารถค้นหาได้) และกลุ่มคนสามารถปี ไม่น่าเป็นไปได้ที่จะมีการลบบันทึกใด ๆ อย่างไรก็ตามฉันจะโน้มน้าวให้รหัสป้องกันสิ่งเช่นนั้น มีวิธีใดบ้างที่ฉันสามารถสร้าง id นี้โดยไม่ต้องค้นหา max id ในปีนี้ทุกครั้งที่มีการแทรกแถวใหม่ ไอเดีย: A CreateNewInvoiceSPซึ่งได้รับความMAXคุ้มค่าสำหรับปีนั้น (yucky) คุณลักษณะบางอย่างในตัวที่มีมนต์ขลังสำหรับการทำสิ่งนี้ (ฉันฝันได้ถูกต้อง) ความสามารถในการระบุ UDF หรือบางอย่างในIDENTITYหรือDEFAULTการประกาศ (??) มุมมองที่ใช้PARTITION OVER + ROW()(ถูกลบจะมีปัญหา) …
11 sql-server  t-sql 

2
ไม่สามารถทำมิเรอร์ฐานข้อมูล SQL Server 2012
เมื่อพยายามทำมิร์เรอร์ฐานข้อมูลโดยใช้คำสั่งต่อไปนี้ ALTER AVAILABILITY GROUP SQLAlwaysonGroup ADD DATABASE test0916aj8CJ ฉันได้รับข้อผิดพลาดดังต่อไปนี้ ข่าวสารเกี่ยวกับ 1475, ระดับ 16, สถานะ 105, ฐานข้อมูลบรรทัดที่ 1 "test0916aj8CJ" อาจมีการเปลี่ยนแปลงบันทึกจำนวนมากที่ยังไม่ได้ทำการสำรองข้อมูล ทำการสำรองข้อมูลบันทึกบนฐานข้อมูลหลักหรือฐานข้อมูลหลัก จากนั้นเรียกคืนการสำรองข้อมูลนี้ในฐานข้อมูลมิเรอร์เพื่อเปิดใช้งานการทำมิเรอร์ฐานข้อมูลหรือในฐานข้อมูลทุติยภูมิทุกครั้งเพื่อให้คุณสามารถเข้าร่วมกลุ่มความพร้อมใช้งานได้ สามารถทำได้โดยไม่สำรองฐานข้อมูลหรือไม่ หรือฉันควรสำรองข้อมูลแล้วยกเลิกการสำรองข้อมูล มันเป็นฐานข้อมูลที่สร้างขึ้นใหม่ดังนั้นฉันไม่จำเป็นต้องสำรองข้อมูล ณ จุดนี้ ฉันได้ลองสิ่งต่อไปนี้ ... BACKUP DATABASE [test0916aj8CJ] TO DISK = N’NUL’ WITH COPY_ONLY, NOFORMAT, INIT, NAME = N’test-Full Database Backup’, SKIP, NOREWIND, NOUNLOAD GO แต่วิธีการข้างต้นไม่ได้ผลเช่นกัน ขอบคุณ

1
การทำธุรกรรมที่ชัดเจนจำเป็นต้องใช้ในขณะนี้ในวง?
SQL Server 2014: เรามีตารางที่มีขนาดใหญ่มาก (100 ล้านแถว) และเราจำเป็นต้องอัปเดตเขตข้อมูลสองสามแห่ง สำหรับบันทึกการจัดส่ง ฯลฯ เรายังต้องการเก็บไว้ในธุรกรรมที่มีขนาดพอดี หากเราปล่อยให้บิตรันด้านล่างแล้วยกเลิก / ยุติการค้นหางานที่ทำไปทั้งหมดจะถูกส่งไปหรือเราจำเป็นต้องเพิ่มคำสั่ง BEGIN TRANSACTION / END TRANSACTION เพื่อให้เราสามารถยกเลิกได้ตลอดเวลา? DECLARE @CHUNK_SIZE int SET @CHUNK_SIZE = 10000 UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or deletedDate is null WHILE @@ROWCOUNT > 0 BEGIN UPDATE …

3
อะไรจะหายไปเมื่อฉันสร้าง Foreign Key โดยใช้ "WITH NOCHECK"
ฉันรู้ว่าถ้าฉันEXISTS()โทรหาค่าการค้นหา FK ดังนั้นถ้าข้อ จำกัด FK นั้นเชื่อถือได้ผลลัพธ์จะเป็นทันที และถ้ามันไม่น่าเชื่อถือ (เช่นเมื่อฉันสร้าง FK โดยใช้WITH NOCHECK) แล้ว SQL Server จะต้องไปและตรวจสอบตารางเพื่อดูว่าค่านั้นมีจริง มีอะไรอีกบ้างที่ฉันแพ้โดยใช้NOCHECK?

1
การแม็พการล็อกอินเซิร์ฟเวอร์หลายครั้งกับผู้ใช้ฐานข้อมูลเดียว
นี่ดูเหมือนจะเป็นคำถามที่โง่ แต่ก็มีงานวิจัยบางอย่างที่ฉันไม่สามารถหาข้อมูลเกี่ยวกับเรื่องนี้ได้เท่านั้น (อาจเป็นเพราะการใช้คำศัพท์ที่ผิด) เป็นไปได้หรือไม่ที่จะเข้าสู่ระบบเซิร์ฟเวอร์หลายเครื่อง (การตรวจสอบเซิร์ฟเวอร์ sql) ไปยังผู้ใช้ฐานข้อมูลเดียว (ซึ่งมีสิทธิ์ที่กำหนดโดยการเป็นสมาชิกของบทบาทฐานข้อมูล)? ฉันมีการลงชื่อเข้าใช้ sql หลายสิบครั้ง (การรับรองความถูกต้องของเซิร์ฟเวอร์ sql) ซึ่งจำเป็นต้องอ่านการตั้งค่าเดียวจากฐานข้อมูลกลางและฉันควรแมปการเข้าสู่ระบบเหล่านี้ทั้งหมดกับผู้ใช้ฐานข้อมูลเดียวในฐานข้อมูลเป้าหมาย ถ้าใช่จะมีไวยากรณ์ T-SQL ที่ถูกต้องอะไรบ้าง

4
ข้อความค้นหาช้าสำหรับผู้ใช้บางราย
ฉันมีแบบสอบถามสองสามข้อที่เรียกจากแอปพลิเคชันเว็บ C # .NET ซึ่งรวดเร็วสำหรับฉันเสมอ (ฉันเป็นผู้ดูแลระบบภายใน SQL Server) แต่สำหรับกลุ่มผู้ใช้ (กลุ่มโดเมนที่มีสิทธิ์ที่จำเป็น) แบบสอบถามนั้นช้ามาก จุดที่มันหมดเวลาในแอปพลิเคชัน อะไรจะทำให้การค้นหาเดียวกันที่แน่นอนนั้นทำงานต่างกันสำหรับผู้ใช้ที่ต่างกัน ข้อมูลเพิ่มเติม: แบบสอบถามเป็นแบบอินไลน์ SQL ในรหัส C # ไม่ใช่ขั้นตอนการจัดเก็บ แอปใช้การรับรองความถูกต้องของโดเมนและทั้งผู้ใช้และตัวฉันเองเรียกใช้แบบสอบถามผ่านแอป ดูเหมือนว่าปัญหานี้เป็นแผนที่แตกต่างกันและมีการแคชหนึ่งครั้งดังนั้นจึงเป็นเหตุผลที่แตกต่างกันสำหรับผู้ใช้ที่ต่างกัน มีบางอย่างที่ส่งผลต่อแคชเพราะตอนนี้คิวรีช้าสำหรับฉันผ่านแอปและรวดเร็วใน SQL Server Management Studio

2
วิธีที่ดีในการโทรงานตัวแทนของเซิร์ฟเวอร์ SQL หลายงานตามลำดับจากงานหลักหนึ่งงานหรือไม่
ฉันมีงานตัวแทนของเซิร์ฟเวอร์ SQL หลายงานที่ควรเรียกใช้ตามลำดับ เพื่อให้ภาพรวมที่ดีของงานที่ควรจะดำเนินการฉันได้สร้างงานหลักที่เรียกงานอื่น ๆ EXEC msdb.dbo.sp_start_job N'TEST1'ที่มีการเรียกร้องให้ sp_start_jobเสร็จสิ้นทันที (งานขั้นตอนที่ 1) แต่แล้วฉันต้องการงานหลักของฉันจะรอจนกว่างานTEST1จะเสร็จสิ้นก่อนที่จะเรียกงานต่อไป ดังนั้นฉันจึงได้เขียนสคริปต์ขนาดเล็กนี้ที่เริ่มดำเนินการทันทีหลังจากงานถูกเรียก (ขั้นตอนงาน 2) และบังคับให้งานหลักรอจนกว่างานย่อยจะเสร็จสิ้น: WHILE 1 = 1 BEGIN WAITFOR DELAY '00:05:00.000'; SELECT * INTO #jobs FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;', 'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'', @execution_status = 0, @job_aspect = N''JOB'''); IF NOT (EXISTS (SELECT top 1 * FROM …

5
อัปเดตด้วย JOIN ในบันทึก 100 มม. ทำอย่างไรให้ดีขึ้น? (ใน T-SQL)
ฉันต้องการอัปเดต 100 ล้านเรคคอร์ดในตารางเดียวโดยมีผลทำให้มาตรฐานของตารางเป็นปกติโดยแทนที่ค่า varchar ของคอลัมน์ด้วย ID เพียงอย่างเดียว (ฉันพูดว่า "การแทนที่" แต่จริงๆแล้วฉันกำลังเขียน ID ลงในคอลัมน์อื่น) สิ่งที่ฉันพยายามทำให้สำเร็จคือการทำให้ชุดข้อมูลเป็นมาตรฐาน ข้อมูลที่ยังไม่ได้ทำให้เป็นมาตรฐานไม่มีการจัดทำดัชนี ความคิดของฉันคือฉันจะไม่สร้างดัชนีในค่า raw รอแทนดัชนีคีย์ต่างประเทศที่จะแทนที่ค่า varchar ด้วยค่าจิ๋วจินหลังจากการอัพเดตเสร็จสมบูรณ์ UPDATE A SET A.AutoClassID = B.AutoClassID FROM AutoDataImportStaging.dbo.Automobile as A JOIN AutoData.dbo.AutoClass as B on (A.AutoClassName = B.AutoClassName) พื้นหลัง ใช้ MSSQL 2008 R2 บนเซิร์ฟเวอร์ 2008 R2 เซิร์ฟเวอร์มี RAM 8 GB เซิร์ฟเวอร์มีหนึ่ง …

1
ใช้ FLOATs กับ RAISERROR
ฉันใช้RAISERROR()เพื่อจัดเตรียมฟังก์ชั่นการทดสอบหน่วยพื้นฐาน (ตามที่นี่ ) แต่ฉันรู้สึกหงุดหงิดกับการไม่สามารถใช้งานได้FLOATsในข้อความแสดงข้อผิดพลาด ฉันรู้ว่าฉันสามารถส่งทุ่นไปที่สตริง แต่ฉันใช้RAISERRORในการทดสอบหน่วยเดียวทุกครั้งฉันไม่ต้องการเพิ่มโค้ดอีกบรรทัดหนึ่งสำหรับการทดสอบทุกครั้ง (การทดสอบหน่วยของฉันมีคำพูดมากพอ!) มีวิธีในการแปลง / แปลงแบบอินไลน์ภายในRAISERRORรายการพารามิเตอร์หรือไม่? หรือมีวิธีอื่นในการแก้ไขข้อบกพร่องนี้หรือไม่? อัปเดต: ดังนั้นในที่สุดสิ่งที่ฉันหวังว่าฉันจะทำได้คือ: RAISERROR('Unit Test FAILED! %f', 11, 0, @floatParm) น่าเสียดายที่RAISERRORไม่ใช้% f หรือลอยโดยทั่วไป ดังนั้นฉันต้องทำสิ่งนี้แทน: DECLARE @str VARCHAR(40) = CAST(@floatParm AS VARCHAR(40)) RAISERROR('Unit Test FAILED! %s', 11, 0, @str) ... ซึ่งดูเหมือนจะยุ่งเหยิงเมื่อมันกระจายผ่านการทดสอบหน่วยนับสิบ ดังนั้นฉันต้องการต้มมันลงไปที่สิ่งนี้: RAISERROR('Unit Test FAILED! %s', 11, 0, CAST(@floatParm AS VARCHAR(40)) …
11 sql-server  t-sql 

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