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

Structured Query Language (SQL) เป็นภาษาสำหรับการสืบค้นฐานข้อมูล คำถามควรมีตัวอย่างรหัสโครงสร้างตารางข้อมูลตัวอย่างและแท็กสำหรับการใช้งาน DBMS (เช่น MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 และอื่น ๆ ) หากคำถามของคุณเกี่ยวข้องกับ DBMS เฉพาะ (ใช้ส่วนขยาย / คุณลักษณะเฉพาะ) ให้ใช้แท็กของ DBMS นั้นแทน คำตอบของคำถามที่ติดแท็กด้วย SQL ควรใช้ SQL มาตรฐาน ISO / IEC

4
มีวิธีแสดงรายการธุรกรรมที่เปิดอยู่บนฐานข้อมูล SQL Server 2000 หรือไม่
ไม่มีใครรู้วิธีใด ๆ ในการแสดงรายการธุรกรรมที่เปิดอยู่บนฐานข้อมูล SQL Server 2000? ฉันทราบว่าฉันสามารถสอบถามมุมมองsys.dm_tran_session_transactionsในเวอร์ชันฐานข้อมูล SQL 2005 (และใหม่กว่า) ได้ แต่สิ่งนี้ไม่มีใน SQL 2000

5
SQL NVARCHAR และ VARCHAR Limits
ทั้งหมดฉันมีแบบสอบถาม SQL แบบไดนามิกขนาดใหญ่ (หลีกเลี่ยงไม่ได้) เนื่องจากจำนวนฟิลด์ในเกณฑ์การเลือกสตริงที่มีไดนามิก SQL จึงเพิ่มขึ้นมากกว่า 4000 ตัวอักษร ตอนนี้ฉันเข้าใจว่ามีชุดสูงสุด 4000 สำหรับNVARCHAR(MAX)แต่ดูที่ SQL ที่เรียกใช้งานใน Server Profiler สำหรับคำสั่ง DELARE @SQL NVARCHAR(MAX); SET @SQL = 'SomeMassiveString > 4000 chars...'; EXEC(@SQL); GO ดูเหมือนว่าจะใช้งานได้ (!?) สำหรับแบบสอบถามอื่นที่มีขนาดใหญ่เช่นกันมันแสดงข้อผิดพลาดซึ่งเกี่ยวข้องกับขีด จำกัด 4000 นี้ (!?) โดยทั่วไปจะตัด SQL ทั้งหมดหลังจากขีด จำกัด 4000 นี้และทำให้ฉันมีข้อผิดพลาดทางไวยากรณ์ แม้จะมีสิ่งนี้ใน profiler แต่ก็แสดงแบบสอบถาม SQL แบบไดนามิกนี้แบบเต็ม (!?) เกิดอะไรขึ้นที่นี่และฉันควรจะแปลงตัวแปร @SQL …


7
มีข้อเสียในการใช้ varchar (255) ทั่วไปสำหรับฟิลด์ที่เป็นข้อความทั้งหมดหรือไม่?
ฉันมีcontactsตารางที่มีสาขาต่าง ๆ เช่นpostcode, first name, last name, town, country, phone numberฯลฯ ซึ่งทั้งหมดนี้จะถูกกำหนดเป็นVARCHAR(255)แม้ว่าจะไม่มีข้อมูลเหล่านี้จะเคยมาใกล้เคียงกับที่มี 255 ตัวอักษร (หากคุณสงสัยก็เป็นเช่นนี้เพราะการย้ายข้อมูล Ruby on Rails จะจับคู่ฟิลด์ String เป็นVARCHAR(255)ค่าเริ่มต้นและฉันไม่เคยใส่ใจที่จะแทนที่มัน) เนื่องจาก VARCHAR จะจัดเก็บเฉพาะจำนวนอักขระจริงของฟิลด์ (พร้อมกับความยาวฟิลด์) มีข้อได้เปรียบที่แตกต่าง (ประสิทธิภาพหรืออย่างอื่น) ในการใช้พูดVARCHAR(16)ทับVARCHAR(255)หรือไม่? นอกจากนี้ฟิลด์เหล่านี้ส่วนใหญ่มีดัชนีอยู่ด้วย ขนาด VARCHAR ที่ใหญ่ขึ้นบนสนามมีผลต่อขนาดหรือประสิทธิภาพของดัชนีหรือไม่? ฉันใช้ MySQL 5
100 mysql  sql 


10
ค้นหาระเบียนทั้งหมดที่มีจำนวนการเชื่อมโยงมากกว่าศูนย์
ฉันกำลังพยายามทำบางสิ่งที่ฉันคิดว่ามันจะง่าย แต่ดูเหมือนจะไม่เป็นเช่นนั้น ฉันมีโมเดลโครงการที่มีตำแหน่งงานว่างมากมาย class Project < ActiveRecord::Base has_many :vacancies, :dependent => :destroy end ฉันต้องการรับโครงการทั้งหมดที่มีตำแหน่งว่างอย่างน้อย 1 ตำแหน่ง ฉันลองทำสิ่งนี้: Project.joins(:vacancies).where('count(vacancies) > 0') แต่มันบอกว่า SQLite3::SQLException: no such column: vacancies: SELECT "projects".* FROM "projects" INNER JOIN "vacancies" ON "vacancies"."project_id" = "projects"."id" WHERE ("projects"."deleted_at" IS NULL) AND (count(vacancies) > 0).

16
การลบเลขศูนย์นำหน้าออกจากฟิลด์ในคำสั่ง SQL
ฉันกำลังทำงานกับแบบสอบถาม SQL ที่อ่านจากฐานข้อมูล SQLServer เพื่อสร้างไฟล์แตกไฟล์ ข้อกำหนดประการหนึ่งในการลบศูนย์นำหน้าออกจากฟิลด์ใดฟิลด์หนึ่งซึ่งเป็นVARCHAR(10)ฟิลด์ธรรมดา ตัวอย่างเช่นหากฟิลด์มี "00001A" คำสั่ง SELECT จำเป็นต้องส่งคืนข้อมูลเป็น "1A" มีวิธีใน SQL ในการลบศูนย์นำหน้าด้วยวิธีนี้หรือไม่? ฉันรู้ว่ามีRTRIMฟังก์ชัน แต่ดูเหมือนว่าจะลบช่องว่างเท่านั้น
100 sql  sql-server  tsql 


5
วิธีเลือกเฉพาะแถวแรกสำหรับแต่ละค่าที่ไม่ซ้ำกันของคอลัมน์
สมมติว่าฉันมีตารางที่อยู่ลูกค้า: CName | AddressLine ------------------------------- John Smith | 123 Nowheresville Jane Doe | 456 Evergreen Terrace John Smith | 999 Somewhereelse Joe Bloggs | 1 Second Ave ในตารางลูกค้ารายหนึ่งเช่น John Smith สามารถมีที่อยู่ได้หลายรายการ ฉันต้องการคำค้นหาที่เลือกสำหรับตารางนี้เพื่อส่งคืนเฉพาะแถวแรกที่พบซึ่งมีรายการที่ซ้ำกันใน 'CName' สำหรับตารางนี้ควรส่งคืนแถวทั้งหมดยกเว้นแถวที่ 3 (หรือ 1 - ที่อยู่ใดก็ได้ในสองรายการนั้นใช้ได้ แต่สามารถส่งคืนได้เพียงรายการเดียว) มีคำหลักที่ฉันสามารถเพิ่มลงในแบบสอบถาม SELECT เพื่อกรองตามว่าเซิร์ฟเวอร์เคยเห็นค่าคอลัมน์มาก่อนหรือไม่
100 sql  sql-server  tsql  select  unique 

6
เพจกับ Oracle
ฉันไม่คุ้นเคยกับ Oracle เท่าที่ฉันอยากจะเป็น ฉันมีระเบียน 250k และฉันต้องการแสดง 100 รายการต่อหน้า ขณะนี้ฉันมีกระบวนงานที่จัดเก็บไว้หนึ่งขั้นตอนซึ่งดึงข้อมูลทั้งหมดในสี่ล้านระเบียนไปยังชุดข้อมูลโดยใช้อะแดปเตอร์ข้อมูลและชุดข้อมูลและ dataadapter วิธีการกรอกข้อมูล (ชุดข้อมูล) ในผลลัพธ์จาก proc ที่เก็บไว้ หากฉันมี "หมายเลขหน้า" และ "จำนวนระเบียนต่อหน้า" เป็นค่าจำนวนเต็มฉันสามารถส่งผ่านเป็นพารามิเตอร์วิธีใดจะเป็นวิธีที่ดีที่สุดในการเรียกคืนเฉพาะส่วนนั้น สมมติว่าถ้าฉันส่ง 10 เป็นเลขหน้าและ 120 เป็นจำนวนหน้าจากคำสั่งที่เลือกมันจะให้ฉันอยู่ที่ 1880 ถึง 1200 หรือประมาณนั้นคณิตศาสตร์ในหัวของฉันอาจจะดับ ฉันกำลังทำสิ่งนี้ใน. NET ด้วย C # คิดว่าไม่สำคัญถ้าฉันสามารถทำให้มันถูกต้องทางด้าน sql ฉันก็ควรจะเจ๋ง อัปเดต: ฉันสามารถใช้คำแนะนำของ Brian ได้และใช้งานได้ดี ฉันต้องการเพิ่มประสิทธิภาพบางอย่าง แต่หน้าจะปรากฏขึ้นภายใน 4 ถึง 5 วินาทีแทนที่จะเป็นนาทีและการควบคุมเพจของฉันก็สามารถรวมเข้ากับ procs ที่จัดเก็บใหม่ของฉันได้เป็นอย่างดี

8
TSQL - วิธีใช้ GO ภายใน BEGIN .. END block?
ฉันกำลังสร้างสคริปต์สำหรับย้ายการเปลี่ยนแปลงโดยอัตโนมัติจากฐานข้อมูลการพัฒนาหลายฐานข้อมูลไปยังการจัดเตรียม / การผลิต โดยทั่วไปจะใช้สคริปต์การเปลี่ยนแปลงจำนวนมากและรวมเข้าด้วยกันเป็นสคริปต์เดียวโดยรวมแต่ละสคริปต์ไว้ในIF whatever BEGIN ... ENDคำสั่ง อย่างไรก็ตามสคริปต์บางส่วนต้องการGOคำสั่งเพื่อให้ตัวแยกวิเคราะห์ SQL รู้เกี่ยวกับคอลัมน์ใหม่หลังจากสร้างแล้ว ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN" UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever อย่างไรก็ตามเมื่อฉันห่อสิ่งนั้นไว้ในIFบล็อก: IF whatever BEGIN ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL …

16
อักขระ '^ M' ที่ท้ายบรรทัด
เมื่อฉันเรียกใช้สคริปต์ SQL เฉพาะในสภาพแวดล้อม Unix ฉันเห็นอักขระ '^ M' ที่ท้ายแต่ละบรรทัดของสคริปต์ SQL เนื่องจากมีการสะท้อนกับบรรทัดคำสั่ง ฉันไม่ทราบว่าสคริปต์ SQL ถูกสร้างขึ้นในระบบปฏิบัติการใด สาเหตุนี้เกิดจากอะไรและจะแก้ไขได้อย่างไร

6
ฉันจะแสดงรายการทุนทั้งหมดที่ผู้ใช้ได้รับได้อย่างไร?
ฉันต้องการดูทุนทั้งหมดบน Oracle DB ฉันใช้คุณลักษณะ TOAD เพื่อเปรียบเทียบสคีมา แต่ไม่แสดงเงินช่วยเหลือที่ล่อใจเป็นต้นดังนั้นจึงมีคำถามของฉัน: ฉันจะแสดงรายการทุนทั้งหมดบน Oracle DB ได้อย่างไร
99 sql  oracle  grant 

3
PostgreSQL รองรับการเปรียบเทียบแบบ“ เน้นเสียง” หรือไม่
ใน Microsoft SQL Server เป็นไปได้ที่จะระบุการเปรียบเทียบแบบ "ไม่เน้นเสียง" (สำหรับฐานข้อมูลตารางหรือคอลัมน์) ซึ่งหมายความว่าเป็นไปได้สำหรับแบบสอบถามเช่น SELECT * FROM users WHERE name LIKE 'João' เพื่อค้นหาแถวที่มีJoaoชื่อ ฉันรู้ว่าเป็นไปได้ที่จะตัดสำเนียงจากสตริงใน PostgreSQL โดยใช้ฟังก์ชันการสนับสนุนunaccent_stringแต่ฉันสงสัยว่า PostgreSQL รองรับการเรียง "ไม่เน้นเสียง" เหล่านี้หรือไม่ดังนั้นSELECTข้างต้นจะได้ผล

3
แทนที่ค่า Null เริ่มต้นที่ส่งกลับจากการเข้าร่วมด้านนอกด้านซ้าย
ฉันมีแบบสอบถาม Microsoft SQL Server 2008 ที่ส่งคืนข้อมูลจากตารางสามตารางโดยใช้การรวมภายนอกด้านซ้าย หลายครั้งไม่มีข้อมูลในตารางที่สองและสามดังนั้นฉันจึงได้ค่าว่างซึ่งฉันคิดว่าเป็นค่าเริ่มต้นสำหรับการรวมภายนอกด้านซ้าย มีวิธีแทนที่ค่าเริ่มต้นในคำสั่ง select หรือไม่? ฉันมีวิธีแก้ปัญหาที่ฉันสามารถเลือกเป็นตัวแปรตารางได้ แต่รู้สึกสกปรกเล็กน้อย SELECT iar.Description, iai.Quantity, iai.Quantity * rpl.RegularPrice as 'Retail', iar.Compliance FROM InventoryAdjustmentReason iar LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = …

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