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

Azure SQL Database เป็นฐานข้อมูลเชิงสัมพันธ์ในฐานะบริการจาก Microsoft แท็กนี้มีไว้สำหรับคำถามเกี่ยวกับ Azure SQL Database ไม่ใช่ SQL Server ที่โฮสต์ใน Azure VM (ใช้ azure-vm)

5
ฉันสามารถเพิ่มข้อ จำกัด ที่ไม่ซ้ำใครเพื่อละเว้นการละเมิดที่มีอยู่ได้หรือไม่?
ฉันมีตารางซึ่งขณะนี้มีค่าซ้ำกันในคอลัมน์ ฉันไม่สามารถลบรายการซ้ำที่ผิดพลาดเหล่านี้ได้ แต่ฉันต้องการป้องกันไม่ให้เพิ่มค่าที่ไม่ซ้ำกันเพิ่มเติม ฉันสามารถสร้างสิ่งUNIQUEที่ไม่ตรวจสอบความสอดคล้องที่มีอยู่ได้หรือไม่ ฉันลองใช้NOCHECKแล้วแต่ไม่สำเร็จ ในกรณีนี้ฉันมีตารางที่ผูกข้อมูลสิทธิ์การใช้งานกับ "CompanyName" แก้ไข:การมีหลายแถวที่มี "CompanyName" เดียวกันนั้นเป็นข้อมูลที่ไม่ดี แต่เราไม่สามารถลบหรืออัปเดตข้อมูลซ้ำเหล่านั้นได้ในขณะนี้ วิธีหนึ่งคือการINSERTใช้ s ที่เก็บไว้ซึ่งจะล้มเหลวในการทำซ้ำ ... ถ้าเป็นไปได้ที่ SQL จะตรวจสอบความเป็นเอกลักษณ์ของตัวเองมันจะดีกว่า ข้อมูลนี้ถูกสอบถามโดยชื่อ บริษัท สำหรับรายการซ้ำที่มีอยู่สองสามรายการนี้จะหมายความว่ามีการส่งคืนและแสดงแถวจำนวนมาก ... แม้ว่าจะเป็นความผิด แต่ก็เป็นที่ยอมรับในกรณีการใช้งานของเรา เป้าหมายคือการป้องกันในอนาคต ดูเหมือนว่าฉันจากความคิดเห็นที่ฉันต้องทำตรรกะนี้ในขั้นตอนการจัดเก็บ

4
EF Code First ใช้ nvarchar (สูงสุด) สำหรับสตริงทั้งหมด สิ่งนี้จะทำให้ประสิทธิภาพการค้นหาเสียหายหรือไม่
ฉันมีฐานข้อมูลบางส่วนที่สร้างขึ้นโดยใช้รหัสเอนทิตีกรอบแรก; แอพใช้งานได้และโดยทั่วไปฉันมีความสุขมากกับสิ่งที่ Code First ให้ฉันทำ ฉันเป็นโปรแกรมเมอร์คนแรกและ DBA ที่สองตามความจำเป็น ฉันกำลังอ่านเกี่ยวกับ DataAttributes เพื่ออธิบายเพิ่มเติมใน C # สิ่งที่ฉันต้องการให้ฐานข้อมูลทำ และคำถามของฉันคือฉันจะได้รับโทษอะไรจากการมีnvarchar(max)เงื่อนไขเหล่านี้ในตารางของฉัน (ดูตัวอย่างด้านล่าง) มีหลายคอลัมน์ในตารางนี้ ใน C # พวกเขาถูกกำหนดเช่น: [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; } public string Name { get; set; } public string Message { get; set; } public string Source { get; set; …

6
การเปลี่ยนการใช้ GETDATE () ในฐานข้อมูลทั้งหมด
ฉันต้องโยกย้ายฐานข้อมูล SQL Server 2017 ในสถานที่ไปยังฐานข้อมูล Azure SQL และฉันเผชิญกับความท้าทายบางอย่างเนื่องจากมีข้อ จำกัด อยู่บ้าง โดยเฉพาะอย่างยิ่งเนื่องจากฐานข้อมูล Azure SQL ทำงานได้เฉพาะในเวลา UTC (ไม่มีเขตเวลา) และเราต้องการเวลาท้องถิ่นเราจึงต้องเปลี่ยนการใช้งานGETDATE() ทุกที่ในฐานข้อมูลซึ่งพิสูจน์แล้วว่าทำงานได้ดีกว่าที่คาดไว้ ฉันสร้างฟังก์ชันที่ผู้ใช้กำหนดเพื่อให้ได้เวลาท้องถิ่นที่ทำงานอย่างถูกต้องสำหรับเขตเวลาของฉัน: CREATE FUNCTION [dbo].[getlocaldate]() RETURNS datetime AS BEGIN DECLARE @D datetimeoffset; SET @D = CONVERT(datetimeoffset, SYSDATETIMEOFFSET()) AT TIME ZONE 'Pacific SA Standard Time'; RETURN(CONVERT(datetime,@D)); END ปัญหาที่ฉันมีปัญหาคือการเปลี่ยนแปลงจริง ๆGETDATE()กับฟังก์ชั่นนี้ในทุกมุมมองกระบวนงานที่เก็บไว้คอลัมน์ที่คำนวณได้ค่าเริ่มต้นข้อ จำกัด อื่น ๆ ฯลฯ อะไรจะเป็นวิธีที่ดีที่สุดในการใช้การเปลี่ยนแปลงนี้ …

1
ฉันจะเปลี่ยนคีย์หลักที่มีอยู่ใน SQL Azure ได้อย่างไร
ฉันต้องการแก้ไขคีย์หลักที่มีอยู่ในตาราง SQL Azure ปัจจุบันมีหนึ่งคอลัมน์และฉันต้องการเพิ่มอีกคอลัมน์ ตอนนี้ใน SQL Server 2008 นี่เป็นเค้กชิ้นหนึ่งเพียงแค่ทำใน SSMS เท่านั้น เสร็จสิ้น นี่คือลักษณะที่ปรากฏของ PK ถ้าฉันเขียนสคริปต์จาก SQL Server: ALTER TABLE [dbo].[Friend] ADD CONSTRAINT [PK_Friend] PRIMARY KEY CLUSTERED ( [UserId] ASC, [Id] ASC ) อย่างไรก็ตามใน SQL Azure เมื่อฉันพยายามเรียกใช้งานข้างต้นแน่นอนว่ามันจะล้มเหลว: Table 'Friend' already has a primary key defined on it. ไม่เป็นไรฉันก็เลยลองวางกุญแจ: Tables without a …

1
การสแกนค่าคงที่และการเข้าร่วม Outer Left มาจากที่ใดในแผนคิวรี SELECT ที่สำคัญ
ฉันมีตารางนี้: CREATE TABLE [dbo].[Accounts] ( [AccountId] UNIQUEIDENTIFIER UNIQUE NOT NULL DEFAULT NEWID(), -- WHATEVER other columns ); GO CREATE UNIQUE CLUSTERED INDEX [AccountsIndex] ON [dbo].[Accounts]([AccountId] ASC); GO แบบสอบถามนี้: DECLARE @result UNIQUEIDENTIFIER SELECT @result = AccountId FROM Accounts WHERE AccountId='guid-here' ดำเนินการกับแผนแบบสอบถามประกอบด้วยดัชนีแสวงหาเดียว - ตามที่คาดไว้: SELECT <---- Clustered Index Seek แบบสอบถามนี้ไม่เหมือนกัน: DECLARE @result …

1
ข้อความค้นหาย่อยที่มีประสิทธิภาพต่ำและมีการเปรียบเทียบวันที่
เมื่อใช้แบบสอบถามย่อยเพื่อค้นหาจำนวนรวมของระเบียนก่อนหน้าทั้งหมดที่มีเขตข้อมูลที่ตรงกันประสิทธิภาพจะแย่มากในตารางที่มีระเบียนน้อยถึง 50k โดยไม่มีแบบสอบถามย่อยแบบสอบถามดำเนินการในไม่กี่มิลลิวินาที ด้วยแบบสอบถามย่อยเวลาดำเนินการขึ้นไปหนึ่งนาที สำหรับแบบสอบถามนี้ผลลัพธ์จะต้อง: รวมเฉพาะบันทึกเหล่านั้นภายในช่วงวันที่ที่กำหนด รวมการนับของระเบียนก่อนหน้าทั้งหมดไม่รวมระเบียนปัจจุบันโดยไม่คำนึงถึงช่วงวันที่ โครงสร้างตารางพื้นฐาน Activity ====================== Id int Identifier Address varchar(25) ActionDate datetime2 Process varchar(50) -- 7 other columns ตัวอย่างข้อมูล Id Address ActionDate (Time part excluded for simplicity) =========================== 99 000 2017-05-30 98 111 2017-05-30 97 000 2017-05-29 96 000 2017-05-28 95 111 2017-05-19 94 222 …

2
ทำไมดัชนีของฉันไม่ถูกใช้ใน SELECT TOP?
นี่คือการทำงานที่ลดลง: ฉันกำลังทำแบบสอบถามเลือก ทุกคอลัมน์ในWHEREและส่วนORDER BYคำสั่งจะอยู่ในดัชนีที่ไม่ใช่คลัสเตอร์IX_MachineryId_DateRecordedเดียวซึ่งเป็นส่วนหนึ่งของคีย์หรือเป็นINCLUDEคอลัมน์ ฉันกำลังเลือกคอลัมน์ทั้งหมดเพื่อที่จะส่งผลให้มีการค้นหาบุ๊กมาร์ก แต่ฉันกำลังทำอยู่TOP (1)ดังนั้นเซิร์ฟเวอร์จึงสามารถบอกได้ว่าการค้นหาจำเป็นต้องทำเพียงครั้งเดียวในตอนท้าย สิ่งสำคัญที่สุดคือเมื่อฉันบังคับให้แบบสอบถามใช้ดัชนีIX_MachineryId_DateRecordedมันจะทำงานในเวลาน้อยกว่าหนึ่งวินาที ถ้าฉันปล่อยให้เซิร์ฟเวอร์ตัดสินใจว่าจะใช้ดัชนีใดมันจะเลือกIX_MachineryIdและใช้เวลาประมาณหนึ่งนาที ที่แนะนำให้ฉันจริง ๆ ว่าฉันได้ทำดัชนีถูกต้องและเซิร์ฟเวอร์เพิ่งตัดสินใจไม่ถูกต้อง ทำไม? CREATE TABLE [dbo].[MachineryReading] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Location] [sys].[geometry] NULL, [Latitude] FLOAT (53) NOT NULL, [Longitude] FLOAT (53) NOT NULL, [Altitude] FLOAT (53) NULL, [Odometer] INT NULL, [Speed] FLOAT (53) NULL, [BatteryLevel] INT …

4
เหตุใด TSQL จึงส่งกลับค่าที่ไม่ถูกต้องสำหรับ POWER (2. , 64)
select POWER(2.,64.)ส่งกลับแทน18446744073709552000 18446744073709551616ดูเหมือนว่าจะมีความแม่นยำเพียง 16 หลัก (ปัดเศษที่ 17) แม้จะทำให้ความแม่นยำชัดเจนselect power(cast(2 as numeric(38,0)),cast(64 as numeric(38,0)))มันยังคงส่งกลับผลลัพธ์ที่ถูกปัดเศษ ดูเหมือนว่าเป็นการดำเนินการขั้นพื้นฐานที่สวยงามที่จะแสดงผลออกมาอย่างแม่นยำด้วยความแม่นยำ 16 หลักเช่นนี้ สูงสุดที่จะสามารถคำนวณได้อย่างถูกต้องเป็นเพียงความล้มเหลวสำหรับPOWER(2.,56.) POWER(2.,57.)เกิดขึ้นที่นี่คืออะไร? สิ่งที่น่ากลัวจริงๆก็คือการselect 2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.;คืนค่าที่เหมาะสม มากสำหรับความอดทน

1
ฉันสามารถบอกได้ว่าผู้ใดปรับปรุงฐานข้อมูลของฉันจาก v11 เป็น v12 บน Azure เมื่อใดและใครบ้าง
ก่อนหน้านี้วันนี้ฉันสังเกตเห็นว่าเซิร์ฟเวอร์ฐานข้อมูล Azure SQL ทั้งหมดของฉันซึ่งอัปเดตจาก v11 เป็น v12 ฉันเป็นคนเดียวใน บริษัท ของฉันที่ควรจะแตะหมายเลขเหล่านั้น แต่ไม่ใช่คนเดียวใน บริษัท ของฉันที่เข้าถึงได้ เนื่องจากฉันไม่ได้เริ่มต้นการอัปเกรดนี้ฉันต้องการทราบว่าใครทำและเมื่อมีการอัปเดตที่ไม่ได้วางแผนนี้เกิดขึ้น ฉันรู้ว่าฉันสามารถเขียนอีเมลถึงทุกคนใน บริษัท ของฉันด้วยการเข้าถึงขอWTFสำหรับข้อมูลอย่างสุภาพ แต่ฉันควรเริ่มต้นการสนทนาด้วยข้อเท็จจริงให้มากที่สุด นอกจากนี้ฉันมีแนวโน้มที่จะคิดว่านี่เป็น Microsoft / Azure SNAFU เนื่องจากการอัปเกรดเซิร์ฟเวอร์ทั้งหมดรู้สึกว่าจงใจเกินไป

4
ฐานข้อมูล Azure SQL“ การล็อกอินล้มเหลวสำหรับผู้ใช้” ในแอปพลิเคชัน แต่ทำงานได้ดีใน SSMS
ฉันต้องการลองใช้คุณลักษณะผู้ใช้ฐานข้อมูลที่มีอยู่ใน Azure SQL Database V12 แต่ฉันประสบปัญหาในการตรวจสอบสิทธิ์ซึ่งดูเหมือนว่าแปลกสำหรับฉัน Classifierฉันสร้างฐานข้อมูลที่เรียกว่า ฉันเพิ่ม IP ของฉันไปที่กฎไฟร์วอลล์เพื่อให้ฉันสามารถเชื่อมต่อกับเซิร์ฟเวอร์ Azure db จาก SSMS บนเวิร์กสเตชันของฉัน เมื่อฉันสามารถเชื่อมต่อผ่าน SSMS เพื่อการดูแลระบบได้ฉันพยายามเพิ่มผู้ใช้ด้วยรหัสผ่านในฐานข้อมูลเช่นนี้ CREATE USER classifier WITH PASSWORD='thepassword' ฉันยังเพิ่มผู้ใช้นี้ในบทบาทตัวเขียนข้อมูลและผู้อ่าน exec sp_addrolemember 'db_datawriter', 'classifier' exec sp_addrolemember 'db_datareader', 'classifier' หลังจากนี้ฉันสามารถเชื่อมต่อกับฐานข้อมูลด้วยข้อมูลรับรองเหล่านี้จาก SSMS: แต่นี่คือสิ่งที่ผิดพลาด: ฉันได้ลองใช้สายอักขระการเชื่อมต่อที่แตกต่างกันหลายอย่างและดูเหมือนจะไม่สามารถเชื่อมต่อกับเว็บแอปที่ฉันกำลังทำงานอยู่ได้ มันใช้งานไม่ได้ในสภาพแวดล้อม Azure ดังนั้นฉันจึงใช้งาน localhost โดยมีสตริงการเชื่อมต่อไปยังฐานข้อมูล Azure และจะไม่เชื่อมต่อ นี่คือสตริงการเชื่อมต่อที่ฉันใช้ในขณะนี้: <add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection …

2
ฉันจะทำให้ sp_BlitzIndex ของ Brent Ozar ทำงานบน Azure ได้อย่างไร
ฉันดาวน์โหลด SQL Server First Aid Kit จากเว็บไซต์ของ Brent Ozar เมื่อฉันพยายามเรียกใช้สคริปต์sp_BlitzIndexกับฐานข้อมูลหลักของฉันผ่าน Microsoft SQL Server จัดการ Studio ขณะที่เข้าสู่ระบบในฐานะผู้ดูแลระบบเซิร์ฟเวอร์ฐานข้อมูล Azure และฉันได้รับข้อผิดพลาดดังต่อไปนี้: ข่าวสารเกี่ยวกับ 262, ระดับ 14, สถานะ 18, กระบวนงาน sp_BlitzIndex, บรรทัด 18 สร้างสิทธิ์ในการสร้างกระบวนการปฏิเสธในฐานข้อมูล 'ต้นแบบ' ฉันสร้างขั้นตอนบนฐานข้อมูลอินสแตนซ์ที่ฉันต้องการทดสอบเรียบร้อยแล้ว เมื่อฉันดำเนินการตามขั้นตอนฉันพบข้อผิดพลาด: เกี่ยวกับข่าวสาร 50000 ระดับ 16 สถานะ 1 บรรทัด 1265 ชื่อวัตถุไม่ถูกต้อง 'mydatabase.sys.partitions' ต่อไปฉันพยายามที่จะฉลาดและเรียกใช้รหัสกระบวนงานที่เก็บไว้โดยตรงกับฐานข้อมูลหลักโดยไม่ต้องสร้างกระบวนงานที่เก็บไว้และได้รับข้อผิดพลาดต่อไปนี้: ข่าวสารเกี่ยวกับ 50000, ระดับ 15, สถานะ 1, บรรทัด …

1
สั่งช้าโดย SQL Server
ในแอปพลิเคชันของฉันฉันมีคิวรีซึ่งทำการค้นหาในตาราง "ไฟล์" ตาราง "files" ถูกแบ่งพาร์ติชันโดย "f". "created" (ดูคำจำกัดความของตารางและมีแถว ~ 26 ล้านแถวสำหรับไคลเอ็นต์ 19 ("f". "cid = 19) จุดนี่คือถ้าฉันทำแบบสอบถามนี้: SELECT "f"."id" AS "FileId" , "f"."name" AS "FileName" , "f"."year" AS "Fileyear" , "f"."cid" AS "clientId" , "f"."created" AS "FileDate" , CASE WHEN ("vnVE0"."value" is not null AND "vnVE0"."value" != '') THEN CAST("vnVE0"."value" …

2
ทำไมส่วนคำสั่ง WHERE ของฉันจึงได้รับประโยชน์จากคอลัมน์ "รวม"
ตามคำตอบนี้เว้นแต่ว่าดัชนีจะถูกสร้างขึ้นเหนือคอลัมน์ที่ใช้ในการ จำกัด การสืบค้นจะไม่ได้รับประโยชน์จากดัชนี ฉันมีคำจำกัดความนี้: CREATE TABLE [dbo].[JobItems] ( [ItemId] UNIQUEIDENTIFIER NOT NULL, [ItemState] INT NOT NULL, [ItemPriority] INT NOT NULL, [CreationTime] DATETIME NULL DEFAULT GETUTCDATE(), [LastAccessTime] DATETIME NULL DEFAULT GETUTCDATE(), -- other columns ); CREATE UNIQUE CLUSTERED INDEX [JobItemsIndex] ON [dbo].[JobItems]([ItemId] ASC); GO CREATE INDEX [GetItemToProcessIndex] ON [dbo].[JobItems]([ItemState], [ItemPriority], [CreationTime]) …

5
ฉันจะลบแผนการดำเนินการที่ไม่ดีออกจากฐานข้อมูล Azure SQL ได้อย่างไร
DBCC FREEPROCCACHEไม่ทำงานใน Azure SQL DB ฉันจะบังคับให้มีแผนอื่นเพื่อปลดปล่อยตัวเองออกจากแคชในลักษณะที่จะไม่ทำให้ระบบการผลิตเสียหาย (เช่นฉันไม่สามารถไปเปลี่ยนตารางที่จำใจได้) นี่เป็นเฉพาะสำหรับ SQL ที่สร้างโดย Entity Framework ดังนั้นจึงไม่ใช่ procs ที่จัดเก็บด้วยตนเองซึ่งมันคือไดนามิก SQL ที่มีประสิทธิภาพ (แหล่งที่มาคือดัชนีที่ไม่ดี -> สถิติที่ไม่ดี ฯลฯ นั่นคือทั้งหมดที่ได้รับการแก้ไข แต่แผนไม่ดีจะไม่หายไป) อัปเดต: ฉันเลือกโซลูชันของ @ mrdenny เมื่อเขาไปถึงที่นั่นก่อน อย่างไรก็ตามฉันใช้สคริปต์ของ @Aaron Bertrand สำเร็จในการทำงาน ขอบคุณทุกคนสำหรับความช่วยเหลือ !!


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