Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa subquery di dalam rangkaian string rekursif selalu mengembalikan NULL?

Ini adalah cara yang sangat aneh untuk mencoba mengimplementasikan treewalker, meningkatkan @id di SELECT dan mengharapkannya untuk diterapkan ke subquery. Ini tidak berfungsi karena SQL Server mengunci nilai @id untuk ekspresi subquery sebagai konstanta tepat pada fase penyiapan kueri.

Lihat contoh ini, di mana @nilai yang dikembalikan dengan jelas menunjukkan bahwa @id terkunci pada 1. Dengan pertanyaan Anda, itu terkunci pada 0, maka setiap subkueri akan mengembalikan NULL, seolah-olah karena tidak ada kecocokan untuk @id =0.

create table table1 (
  id int);
create table table2 (
  id int, value varchar(10));
insert table1 values (1),(2),(3),(4);
insert table2 values
(1,1),
(2,2),
(3,3),
(4,4);

DECLARE @id INT, @value VARCHAR(10);

SELECT @id=1, @value='';

SELECT
    @value = @value + (SELECT TOP 1 value FROM TABLE2 WHERE [email protected]) + '-',
    @id = @id+1
FROM TABLE1;

select @value, @id

-- result
1-1-1-1       5

Jika Anda hanya menginginkan nilai dari 2, maka alih-alih variabel @id, Anda cukup menghubungkan subquery ke table.id seperti di bawah ini:

create table table1 (id int);
create table table2 (id int, value varchar(10));
insert table1 values (1),(2),(3),(4);
insert table2 values
(1,1),
(3,9),
(4,4);

DECLARE @value VARCHAR(10);

SELECT @value='';

SELECT
    @value = @value + isnull((SELECT TOP 1 value 
                              FROM TABLE2 
                              WHERE id=table1.id) + '-','')
FROM TABLE1;

select @value

-- Result
1-9-4


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah skema db ke dbo

  2. Bagaimana cara mendapatkan jumlah false di setiap kolom tabel?

  3. kesalahan:26 - Kesalahan Menemukan Server/Instance Ditentukan. (Tidak dapat terhubung ke Db lokal saya Dari server Host saya)

  4. SQL Menyisipkan satu baris atau beberapa baris data?

  5. Bagaimana IIF() Bekerja di SQL Server