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

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

1
sp_execute ต้องการพารามิเตอร์ '@handle' ของประเภท 'int'
ฉันพยายามตรวจสอบขั้นตอนการจัดเก็บหากมีตารางอยู่ในฐานข้อมูลปลายทางของฉัน หากไม่เป็นเช่นนั้นฉันจะสร้างตารางโดยใช้ตาราง data_schema จากฐานข้อมูลต้นทาง อย่างไรก็ตามเมื่อฉันใช้ sp_execute เพื่อพยายามนำกลับมาหากตารางมีอยู่ฉันได้รับข้อผิดพลาดขั้นตอนคาดว่าพารามิเตอร์ '@handle' ของประเภท 'int' ฉันไม่ได้ใช้พารามิเตอร์ @handle มีคนบอกฉันว่าข้อผิดพลาดนี้มีความหมายอย่างไรและทำไมฉันถึงได้รับ ส่วนที่เกี่ยวข้องของรหัสของฉันอยู่ด้านล่าง DECLARE @SQL NVARCHAR(MAX), @Parameters NVARCHAR(4000), @TableNotExists INT, @SourceTable NVARCHAR(200), @DestDB NVARCHAR(200) BEGIN SET @SourceTable = 'table' SET @DestDB = 'database' SET @Parameters = N'@SourceTableIN NVARCHAR(200), @TableNotExistsOut INT OUTPUT' SET @SQL = N'USE [' + @DestDB + …

2
SQL Server ประเมินฟังก์ชันหนึ่งครั้งสำหรับทุกแถวหรือไม่
ฉันมีคำถามเช่นนี้ SELECT col1 FROM MyTable WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) BETWEEN col2 AND col3 ; สิ่งนี้จะให้คำแนะนำเครื่องมือในแผนการดำเนินการที่คล้ายกับสิ่งนี้: ที่ไม่dateaddเป็นส่วนหนึ่งของการแสวงหาภาคได้รับการดำเนินการสำหรับแถวในแบบสอบถามทุกครั้งหรือไม่ หรือ SQL Server คำนวณค่าหนึ่งครั้งสำหรับแบบสอบถามทั้งหมดหรือไม่

1
การเพิ่ม SPARSE ทำให้ตารางใหญ่ขึ้นมาก
ฉันมีตารางบันทึกทั่วไปแถวประมาณ 5 เมตร มีฟิลด์ "พิมพ์อย่างยิ่ง" ที่จัดเก็บประเภทเหตุการณ์และมีคอลัมน์ "พิมพ์จำนวนมาก" ที่ประกอบด้วยข้อมูลที่เกี่ยวข้องกับเหตุการณ์ นั่นคือความหมายของคอลัมน์ "ที่พิมพ์แบบแพ้ ๆ " นั้นขึ้นอยู่กับประเภทของเหตุการณ์ คอลัมน์เหล่านี้ถูกกำหนดเป็น: USER_CHAR1 nvarchar(150) null, USER_CHAR2 nvarchar(150) null, USER_CHAR3 nvarchar(150) null, USER_CHAR4 nvarchar(150) null, USER_CHAR5 nvarchar(150) null, USER_INTEGER1 int null, USER_INTEGER2 int null, USER_INTEGER3 int null, USER_INTEGER4 int null, USER_INTEGER5 int null, USER_FLAG1 bit null, USER_FLAG2 bit null, …

1
วิธีรับประสิทธิภาพคิวรีที่แม่นยำ
ฉันพยายามปรับปรุงประสิทธิภาพของโพรซีเดอร์ที่เก็บไว้ เมื่อฉันรัน SP มันจะเสร็จสิ้นเกือบจะในทันทีราวกับมีบางสิ่งบางอย่างถูกแคช ฉันถูกบอกให้ใช้ SQL สองบรรทัดต่อไปนี้ก่อนดำเนินการ SP ใน SSMS: DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE เมื่อฉันรัน SP ด้วยโค้ดสองบรรทัดด้านบน SP จะเสร็จสิ้นในเวลาประมาณ 8 วินาที อย่างไรก็ตามนี่เป็นการให้เวลาดำเนินการจริงแก่ฉันจริง ๆ หรือไม่ ฉันจะรู้ได้อย่างไร

2
ประเภทข้อมูลที่จะเก็บข้อมูล XML ใน: VARCHAR (MAX) หรือ XML
ฉันกำลังกำหนด schema สำหรับชุดทรัพยากรใหม่โดยใช้ SQL Server 2008 ... ในกรณีนี้แต่ละระเบียน ( เช่นแถว ) จะต้องเก็บชิ้นส่วน XML เมื่อเวลาผ่านไป; แม้ว่าจะไม่บ่อย ฉันจะต้องสืบค้น XML เพื่อค้นหาองค์ประกอบและค่าแอตทริบิวต์ หากปล่อยทิ้งไว้กับสิ่งที่ฉันทำเองฉันมักจะใช้ประเภทข้อมูลxmlแม้ว่าฉันจะถูกชักนำให้เชื่อว่าสิ่งนี้มีปัญหา นั่นทำให้ฉันมีคำถาม รับสถานการณ์นี้สิ่งที่ปัจจัยที่ฉันควรจะมีการพิจารณาเมื่อพยายามที่จะตัดสินใจระหว่างการจัดเก็บ XML ในXMLคอลัมน์เทียบกับvarchar (MAX)คอลัมน์ ถ้ามันช่วย ... นี่คือรายละเอียดเพิ่มเติม: ไม่มีการตัดสินใจเกี่ยวกับการใช้สคีมาสำหรับชิ้นส่วนเหล่านี้ ( เช่น XSD's ) ขนาดของชิ้นส่วนจะมีตั้งแต่เล็กไปจนถึงใหญ่มาก XML ทั้งหมดจะมีรูปแบบที่ดี ในแต่ละวันจะมีการรวบรวมชิ้นส่วนได้มากถึง 10,000 ชิ้นพร้อมการสนับสนุนการสืบค้นออนไลน์ที่จำเป็นสำหรับ ~ 3 เดือน การค้นหากับ XML จะเกิดขึ้นตลอดทั้งวัน แต่ควรอยู่ในสถานะที่มีคำสั่งประเภทนี้พร้อมกันเล็กน้อย

4
ฉันจะทราบได้อย่างไรว่าขั้นตอนหรือทริกเกอร์ที่เก็บไว้กำลังใช้ตารางใน SQL Server 2008 R2
นี่เป็นกรณีที่ใน DB ที่ฉันกำลังตรวจสอบมีตารางเก็บถาวรซึ่งเก็บประวัติผู้ใช้และมีทริกเกอร์หรือขั้นตอนการจัดเก็บที่หลังจากลบแถวออกจากตารางนี้ในบางครั้งเพื่อหลีกเลี่ยงการมีขนาดใหญ่เกินไป เหมือนกันฉันไม่ได้ออกแบบฐานข้อมูลฉันแค่ทำการบำรุงรักษาแอปพลิเคชันที่ใช้ฐานข้อมูลนี้ดังนั้นฉันจึงไม่ทราบชื่อของขั้นตอนหรือทริกเกอร์ที่เก็บไว้สิ่งที่ฉันต้องการทำคือค้นหาโพรซีเดอร์ที่เก็บไว้นี้ หรือทริกเกอร์ตรวจสอบรหัสและปรับเปลี่ยนเพื่อปล่อยให้ "ประวัติผู้ใช้" นี้ยาวขึ้นในตาราง มีคนบอกให้ฉันตรวจสอบตาราง "sysobjects" ซึ่งฉันสามารถเห็นบางสิ่งบางอย่างที่มีชื่อเดียวกันของตารางได้ แต่นี่เป็นข้อมูลเดียวที่ฉันสามารถเรียกคืนได้คำแนะนำใด ๆ ขอบคุณ.

5
แบบสอบถามที่เรียกใช้แตกต่างกันใน SQL 2005 กับ SQL 2008R2
ที่สำนักงานของฉันเรามีข้อความค้นหาที่น่าเกลียด แต่ทำงานได้ค่อนข้างดีในการผลิตและในสภาพแวดล้อมการพัฒนา (20 วินาทีและ 4sec ตามลำดับ) อย่างไรก็ตามในสภาพแวดล้อมการทดสอบของเราใช้เวลามากกว่า 4 ชั่วโมง SQL2005 (+ แพตช์ล่าสุด) กำลังทำงานในการผลิตและการพัฒนา SQL2008R2 กำลังทำงานในการทดสอบ ฉันดูที่ Query Plan และมันแสดงให้เห็นว่า SQL2008R2 กำลังใช้ TempDB โดย Table Spool (lazy spool) เพื่อจัดเก็บแถวที่ส่งคืนจากลิงก์เซิร์ฟเวอร์ ขั้นตอนต่อไปคือการแสดงลูปซ้อน (ซ้ายกึ่งต่อต้านเข้าร่วม) ขณะที่กินแบบสอบถามถึง 96.3% เส้นแบ่งระหว่างตัวดำเนินการทั้งสองอยู่ที่ 5,398MB! แผนแบบสอบถามสำหรับ SQL 2005 ไม่แสดงการใช้ tempdb และไม่ใช้ Left Anti Semi Join ด้านล่างนี้คือรหัสที่ถูกสุขอนามัยและการดำเนินการตามแผนในปี 2005 ด้านบนคือ 2008R2 ด้านล่าง อะไรเป็นสาเหตุให้เกิดการเปลี่ยนแปลงอย่างรุนแรงและช้าลง? …

7
ภารกิจการสำรองข้อมูลตามกำหนดเวลาไม่ได้ทำการสำรองฐานข้อมูลทั้งหมดเสมอ
ฉันมีงานใน SQL 2008 ที่รัน proc ที่เก็บไว้เพื่อสำรองฐานข้อมูลทั้งหมด สิ่งนี้รันทุกวันผ่านงานตัวแทนเซิร์ฟเวอร์ sql มันหยุดทำงานด้วยความสำเร็จทุกวัน แต่บางวันก็หยุดทำงานด้วยความสำเร็จหลังจากทำการสำรองฐานข้อมูลบางส่วนเท่านั้น อาจเป็นจำนวนฐานข้อมูลที่แตกต่างกันในแต่ละครั้ง วันส่วนใหญ่จะสำเร็จการสำรองฐานข้อมูลทั้งหมด แต่บางครั้งการสำรองข้อมูล 2 สำเร็จบางครั้ง 5 เป็นต้น ฉันไม่เห็นข้อผิดพลาดใด ๆ ในประวัติงาน, ตัวแสดงเหตุการณ์หรือบันทึกเซิร์ฟเวอร์ sql กำลังสำรองข้อมูลไปยังดิสก์ภายในเครื่องแม้ว่าโฟลเดอร์จะเป็น "จุดเชื่อมต่อ" ไปยังโฟลเดอร์บนไดรฟ์ข้อมูลที่เก็บข้อมูลแบบขยายได้ ระบบปฏิบัติการ Windows 2003 64 บิตที่เรียกใช้ Sql Server 2008 web edition 64 บิตเป็นเครื่องเสมือนที่ทำงานบนโฮสต์ Vmware ESXi 5 ขั้นตอนการเก็บ: ALTER PROCEDURE [dbo].[backup_all_databases] @path VARCHAR(255)='c:\backups\' AS DECLARE @name VARCHAR(50) …

2
ฉันจะช่วย SQL Server ให้รู้ได้อย่างไรว่าคอลัมน์มุมมองที่จัดทำดัชนีของฉันไม่เป็น NULL
ฉันมีมุมมองการจัดทำดัชนีต่อไปนี้กำหนดไว้ใน SQL Server 2008 (คุณสามารถดาวน์โหลด schema การทำงานจากส่วนสำคัญสำหรับการทดสอบ): CREATE VIEW dbo.balances WITH SCHEMABINDING AS SELECT user_id , currency_id , SUM(transaction_amount) AS balance_amount , COUNT_BIG(*) AS transaction_count FROM dbo.transactions GROUP BY user_id , currency_id ; GO CREATE UNIQUE CLUSTERED INDEX UQ_balances_user_id_currency_id ON dbo.balances ( user_id , currency_id ); GO user_id, currency_idและtransaction_amountมีการกำหนดไว้ทั้งหมดเป็นคอลัมน์ในNOT NULL …

3
การผูกมัดงานของ บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL
ฉันมีแพคเกจงานหลายอย่างสำหรับแต่ละฉันมีการตั้งค่างานในตัวแทนเซิร์ฟเวอร์ sql บางครั้งฉันควรวิ่งไปด้วยกัน เป็นวิธีที่ดีที่สุดในการทำงานทั้งหมดในลำดับที่กำหนดคืออะไร ฉันรู้สึกประหลาดใจเล็กน้อยที่ตัวแทนเซิร์ฟเวอร์ sql ไม่สามารถรวมงานเป็นขั้นตอนงานที่จะดำเนินการ ฉันลองแล้ว

3
ผลกระทบความเร็วของการใช้ varchar ใน SQL Server 2008
ในสมัยก่อนการใช้varcharเกินcharเป็นสิ่งที่ไม่ใหญ่เพราะvarcharถูกเก็บไว้ในหน้าอื่นนอกเหนือจากส่วนที่เหลือของแถว วันนี้เป็นกรณีของ SQL Server 2008 หรือยัง ฉันจะเห็นหน่วยความจำ / ประสิทธิภาพเพิ่มขึ้นจากการเปลี่ยน 1-3 varchar(5)คอลัมน์เป็นchar(5)คอลัมน์บนตารางด้วยหรือไม่ ก) บอก 2.000.000 แถว b) หากvarcharคอลัมน์ใด ๆเป็นส่วนหนึ่งของดัชนี / คีย์หลัก

5
วิธีที่มีประสิทธิภาพมากที่สุดในการแก้ไขคำจำกัดความของคอลัมน์ในตารางที่มีแถวเป็นล้านแถวคืออะไร
ฉันต้องการเปลี่ยนคอลัมน์จาก NOT NULL เป็น NULL ในตารางที่มีแถวนับล้าน ฉันได้ลองง่ายๆ alter table Table1 ALTER COLUMN Column1 XML NULL แต่มันต้องใช้ตลอดไป ดังนั้นนี่คือคำถามของฉัน: เหตุใดจึงใช้เวลานานกว่าจะใช้การเปลี่ยนแปลง มีวิธีที่ดีกว่าที่จะทำหรือไม่

3
ระบุการเชื่อมต่อใน Query Studio T-SQL Query
เมื่อเพิ่มผู้ใช้เป็นบทบาทในเซิร์ฟเวอร์ฐานข้อมูลฉันมักจะใช้ฟังก์ชั่น "Script this action" จาก GUI จากนั้นฉันก็ไปที่ "การเชื่อมต่อ :: เปลี่ยนการเชื่อมต่อ" เพื่อทำสิ่งเดียวกันบนเซิร์ฟเวอร์อื่นของฉัน มีวิธีที่ฉันสามารถระบุการเชื่อมต่อในการดำเนินการสคริปต์ดังนั้นฉันไม่จำเป็นต้องทำตามขั้นตอนที่สองเปลี่ยนการเชื่อมต่อ?

1
ทำลายและฟื้นฟูกระจก
ฉันต้องทำการบำรุงรักษาบางอย่างบนโหนดลำดับที่สองของมิเรอร์ เนื่องจากนี่เป็นผลมาจากไซต์เริ่มช้าลงในขณะที่มิเรอร์สร้างใหม่หลังจากเครือข่ายสั้น ๆ ฉันต้องการที่จะปลอดภัยและปิดการใช้งานมิเรอร์จากนั้นเปิดใช้งานอีกครั้งหลังจากที่ฉันทำ poking ที่เซิร์ฟเวอร์ที่ละเมิด แผนการที่ฉันมีในตอนนี้คือ: ปิดการใช้งานกระจก ทำการแก้ไขปัญหาที่อาจเป็นอันตรายของฉัน กู้คืนบันทึกธุรกรรมที่ไม่ได้รับทั้งหมด สร้างกระจกอีกครั้ง นี่เป็นวิธีที่ปลอดภัยที่สุดในการทำลาย / สร้างกระจกอีกครั้งหรือไม่? มี gotcha ใด ๆ ที่ฉันควรระวัง?

1
ฉันจะเขียนทริกเกอร์ที่เขียนสำหรับ Oracle ได้อย่างไรสำหรับ SQL Server
ฉันจะเขียนทริกเกอร์ที่เขียนขึ้นใหม่สำหรับ Oracle Server ได้อย่างไรสำหรับ SQL นี่คือรหัสทริกเกอร์ Oracle ของฉัน: CREATE OR REPLACE TRIGGER P000KUL_TEST BEFORE INSERT ON P000KUL REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN SELECT TO_CHAR(SYSDATE, 'dd/mm/RRRR') INTO :NEW.SYSTEM_DATE FROM DUAL; SELECT TO_CHAR(SYSDATE, 'hh:mi') INTO :NEW.SYSTEM_TIME FROM DUAL; END;

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