Kueri Eksekusi Bersarang SQL

Karena tipe data varchar memiliki batas 8000 karakter, saya mencoba menjalankan pernyataan SELECT di dalam pernyataan EXEC yaitu sebagai berikut :

--Untuk mendapatkan daftar pengguna dari database

declare @x varchar(2000)
set @x='select STRING_AGG( concat('+'''['''+',CONCAT([DatabaseUserName],'+''']'''+')),'+''','''+' )
        from(
        SELECT DP1.name AS DatabaseRoleName, isnull (DP2.name,'+ '''No members'''+') AS DatabaseUserName
        FROM sys.database_role_members AS DRM
        RIGHT OUTER JOIN sys.database_principals AS DP1 ON DRM.role_principal_id = DP1.principal_id LEFT OUTER JOIN sys.database_principals AS DP2 ON DRM.member_principal_id = DP2.principal_id 
        WHERE DP1.type ='+ '''R'''+' 
        ) as txt'

--Di bawah ini adalah berbagai cara saya mencoba menjalankan pernyataan dan kesalahannya 1)

exec('deny select on [schema].[TABLE] to '+ (exec  @x)) 
ERROR  = Incorrect syntax near '('.

2)

exec('deny select on [schema].[TABLE] to '+ exec N'SP_EXECUTESQL @x')
ERROR  = Incorrect syntax near the keyword 'exec'.

3)

exec('deny select on [schema].[TABLE] to '+ exec SP_EXECUTESQL @x)
ERROR
Incorrect syntax near ')'.
Incorrect syntax near the keyword 'exec'.

4)

exec(('deny select on [schema].[Table] to '+ exec N'@x'))
Sysntax error

Dan seterusnya, saya Mencoba beberapa kombinasi untuk mencoba mencari tahu masalah sintaksis.

Tapi intinya adalah untuk tidak menyimpan output dari pernyataan pilih dalam variabel karena data dapat melebihi nilai maksimal, melainkan dieksekusi dalam mengeksekusi pernyataan dan menolak izin.

Saya tahu saya dapat memecah output dari pernyataan pilih menjadi bagian-bagian yang lebih kecil dan mengulanginya.

Bantuan atau wawasan apa pun akan sangat dihargai.

Terima kasih atas waktu Anda.


person Eric    schedule 19.12.2019    source sumber
comment
Exec hanya mendukung sysntax seperti exec('exex @x').   -  person Leon Yue    schedule 26.12.2019


Jawaban (1)


Exec hanya mendukung exec bersarang seperti ini:

exec( exec  @x')

Referensi:

  1. JALANKAN (Transact-SQL)
  2. Ikhtisar dan contoh EXEC SQL

Semoga ini membantu.

person Leon Yue    schedule 26.12.2019