Tham số in trong SQL động


9

Tôi đã sử dụng SQL động cho nhiều tác vụ và liên tục gặp phải cùng một vấn đề: In các giá trị của các biến được sử dụng bên trong câu lệnh T-SQL động.

VÍ DỤ:

Declare @SQL nvarchar(max), @Params nvarchar(max), @DebugMode bit, @Foobar int
select @DebugMode=1,@Foobar=364556423

set @SQL='Select @Foobar'
set @Params=N'@Foobar int'

if @DebugMode=1 print @SQL
exec sp_executeSQL @SQL,@Params
    ,@Foobar=@Foobar

Kết quả in của đoạn mã trên chỉ đơn giản là "Chọn @Foobar". Có cách nào để tự động in các giá trị & tên biến của sql đang được thực thi không? Hoặc khi thực hiện in, thay thế các tham số bằng các giá trị thực tế của chúng để SQL có thể chạy lại được?

Tôi đã chơi với việc tạo một hoặc hai hàm để thực hiện một cái gì đó tương tự, nhưng với chuyển đổi loại dữ liệu, các vấn đề cắt ngắn phù hợp với mẫu và các giải pháp không động. Tôi tò mò làm thế nào các nhà phát triển khác giải quyết vấn đề này mà không in thủ công từng biến một cách thủ công.

Câu trả lời:


4

Một cách để thực hiện điều này có lẽ là điều bạn đã làm và đó là thay thế dòng của bạn:

if @DebugMode=1 print @SQL

với

if @DebugMode=1 print @SQL + ' ' + convert(nvarchar(max), @Foobar)

Và bạn sẽ phải làm theo cách này cho tất cả các biến của mình, bạn sẽ cần chuyển đổi chúng theo cách thủ công để tránh lỗi chuyển đổi.

Bạn cũng có thể sử dụng RAISERROR theo cách tương tự:

if @DebugMode=1 RAISERROR (N'We used a value of %d for @Foobar', 10, 1, @Foobar)

HTH


Thật không may, điều này có nghĩa là viết thủ công thay thế cho từng và mọi biến được sử dụng trong câu lệnh động. Điều này có thể trở nên khó sử dụng khi hơn 20 biến được sử dụng và thay đổi hoặc khi nhiều câu lệnh sql động đang được xây dựng đồng thời.
Brent D
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.