ฉันจะระบุความกว้างของคอลัมน์ varchar ที่คำนวณได้อย่างไร

ฉันต้องการสร้างคอลัมน์จากการคำนวณที่คงอยู่ในตาราง เพื่อที่ฉันจะได้ใช้เป็นส่วนหนึ่งของความสัมพันธ์ของคีย์นอกกับตารางอื่นได้

ฉันมีตารางเหล่านี้:

เหตุการณ์ (ตัวระบุที่ไม่ซ้ำกันของ EventID, EventCode varchar(8)) -- EventCode เป็นคอลัมน์ตัวแยกแยะ

ฝ่าย (ตัวระบุที่ไม่ซ้ำกันของ EventID)

... และฉันต้องการเพิ่มคอลัมน์ EventCode ใน "Parties" เพื่อให้ข้อ จำกัด ของคีย์ต่างประเทศสามารถรวมทั้งสองคอลัมน์ได้

ฉันได้ลองสิ่งนี้แล้ว:

ALTER TABLE Parties ADD EventCode AS 'PARTY' PERSISTED

แต่นั่นจะเพิ่มคอลัมน์เป็น ฉันไม่รู้ char(5) หรืออะไรสักอย่าง (เนื่องจากประเภทของคอลัมน์อนุมานจากนิพจน์) ดังนั้นฉันจึงไม่สามารถเชื่อมโยงมันกลับไปที่ Events.EventCode ได้เนื่องจากทั้งสองคอลัมน์มีความกว้างต่างกัน

มีวิธีระบุความกว้างของคอลัมน์จากการคำนวณหรือไม่ หรือฉันต้องทำเช่นนี้ (ซึ่งดูน่าเกลียดแต่ฉันคิดว่าจะได้ผล)

ALTER TABLE Parties ADD EventCode AS CAST('PARTY' AS varchar(8)) PERSISTED

person Matt Hamilton    schedule 20.01.2009    source แหล่งที่มา


คำตอบ (1)


คุณจะต้องแปลงค่าตามขนาดและประเภทข้อมูลที่คุณต้องการ การใส่สตริงแบบคงที่จะทำให้ SQL Server ใช้ CHAR เนื่องจากคุ้มค่ากว่า VARCHAR

หากคุณต้องการที่จะทำโดยไม่มี CAST ในการกำหนด คุณจะต้องปัดค่าออกเป็น 8 อักขระ 'PARTY ' แล้วส่งไปที่ VARCHAR เมื่อทำการรวมของคุณ (ซึ่งจะทำให้ประสิทธิภาพของฐานข้อมูลลดลง)

person mrdenny    schedule 20.01.2009
comment
ขอบคุณ คุณ mrdenny. น่าผิดหวัง แต่ฉันเดาว่ามันเป็นเพียงการโจมตีครั้งเดียวเมื่อมันสร้างแถวเนื่องจากยังคงมีอยู่ - person Matt Hamilton; 20.01.2009