Bagaimana cara menentukan lebar kolom varchar yang dihitung?

Saya ingin membuat kolom komputasi yang bertahan dalam sebuah tabel sehingga saya bisa menggunakannya sebagai bagian dari hubungan kunci asing ke tabel lain.

Saya punya tabel ini:

Peristiwa (pengidentifikasi unik EventID, EventCode varchar(8)) -- EventCode adalah kolom diskriminator

Pihak (pengidentifikasi unik EventID)

... dan saya ingin menambahkan kolom EventCode ke "Pihak" sehingga batasan kunci asing dapat menyertakan kedua kolom.

Saya sudah mencoba ini:

ALTER TABLE Parties ADD EventCode AS 'PARTY' PERSISTED

Tapi itu menambahkan kolom sebagai, entahlah, char(5) atau semacamnya (karena tipe kolom disimpulkan dari ekspresi). Jadi saya tidak bisa menghubungkannya kembali ke Events.EventCode karena kedua kolom memiliki lebar yang berbeda.

Apakah ada cara untuk menentukan lebar kolom yang dihitung, atau apakah saya harus melakukan ini (yang tampaknya jelek tapi menurut saya akan berhasil)?

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

person Matt Hamilton    schedule 20.01.2009    source sumber


Jawaban (1)


Anda perlu memberikan nilai ke ukuran dan tipe data yang Anda inginkan. Memasukkan string statis akan membuat SQL Server menggunakan CHAR karena lebih hemat biaya daripada VARCHAR.

Jika Anda ingin melakukannya tanpa CAST dalam definisinya maka Anda perlu menambahkan nilainya menjadi 8 karakter 'PARTY' dan kemudian melemparkannya ke VARCHAR saat melakukan penggabungan (yang akan mematikan kinerja database).

person mrdenny    schedule 20.01.2009
comment
Terima kasih Pakdenny. Mengecewakan, tapi menurut saya itu hanya pukulan satu kali ketika membuat baris karena terus berlanjut. - person Matt Hamilton; 20.01.2009