Saya punya tabel (tidak dirancang oleh saya) yang memiliki 20 kolom bernama variabel. Artinya, tergantung pada jenis catatan apa yang Anda lihat, nama kolom yang berlaku dapat berubah.
Kemungkinan nama kolom disimpan di tabel lain, yang dapat saya query dengan sangat mudah.
Karenanya, kueri yang benar-benar saya cari berjalan seperti ini:
SELECT Col1 AS (SELECT ColName FROM Names WHERE ColNum = 1 and Type = @Type),
Col2 AS (SELECT ColName FROM Names WHERE ColNum = 2 and Type = @Type)
FROM Tbl1
WHERE Type = @Type
Jelas itu tidak berhasil, jadi bagaimana saya bisa mendapatkan hasil yang serupa?
'
Saya sudah mencoba membangun string kueri dan
Ternyata saya menggunakan kueri yang salah untuk membangun SQL dinamis dan karenanya membangun string kosong. SQL Server pasti mengeksekusi string kosong dengan benar.EXECUTE
memasukkannya, tetapi itu hanya mengembalikan "Perintah yang Berhasil Diselesaikan" dan sepertinya tidak mengembalikan rowset.
Perhatikan bahwa alasan saya ingin ini terjadi, bukan hanya pengodean nama kolom yang sulit, adalah bahwa nama kolom dapat dikonfigurasi pengguna.
Jawaban:
Coba kode berikut:
Ini mengembalikan pernyataan SELECT:
SELECT CONVERT(INT, Col1) AS [AccountID],CONVERT(VARCHAR(50), Col2) AS [AccountName],CONVERT(DATE, Col3) AS [AccountOpenDate] FROM #Data WHERE [Type] = 'Account'
sumber
Ini terdengar prima untuk solusi tampilan ujung depan. Kueri 1 akan menarik kembali data Anda, Kueri 2 akan menarik kembali nama kolom dan dalam kode ketika Anda membangun struktur apa pun yang Anda gunakan untuk menampilkan Anda mengatur header dari kueri kedua.
Sementara Metode SQL Murni dimungkinkan, itu akan menjadi SQL dinamis dan pemeliharaan kode akan menjadi mimpi buruk.
Mungkin Anda juga mencari
sp_executesql
dan tidak hanyaEXECUTE N'Query String'
karena itu dapat menyelesaikan masalah Anda dengan perintah yang berhasil diselesaikan.sumber