Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

đối số thủ tục được lưu trữ sql làm tham số cho truy vấn động

Đây là một giải pháp thay thế an toàn hơn nhiều:

ALTER PROCEDURE dbo.queryfunctions 
  @Tabname NVARCHAR(511),
  @colname NVARCHAR(128),
  @valuesname VARCHAR(150)
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = 'SELECT * FROM ' + @Tabname 
           + ' WHERE ' + QUOTENAME(@colname) + ' = @v';

  EXEC sp_executesql @sql, N'@v VARCHAR(150)', @valuesname;
END
GO

EXEC dbo.queryfunctions N'dbo.education', N'eduChildName', 'Revathi';

Tôi đã thay đổi điều gì?

  1. Luôn sử dụng dbo tiền tố khi tạo / tham chiếu đối tượng.
  2. Tên bảng và cột là NVARCHAR can dài hơn 150 ký tự. An toàn hơn nhiều khi cho phép các tham số phù hợp với một bảng mà ai đó có thể thêm vào trong tương lai.
  3. Đã thêm SET NOCOUNT ON như một biện pháp bảo vệ chống lại chi phí mạng và có khả năng gửi các tập hợp kết quả sai cho khách hàng.
  4. @sql phải luôn là NVARCHAR .
  5. Sử dụng QUOTENAME xung quanh tên thực thể chẳng hạn như bảng hoặc cột để ngăn chặn việc đưa vào SQL và cũng để bảo vệ khỏi những tên được chọn kém (ví dụ:từ khóa).
  6. Sử dụng các tham số thích hợp nếu có thể (một lần nữa để giúp ngăn chặn việc đưa vào SQL nhưng cũng để tránh phải thực hiện tất cả các loại thoát dấu phân cách trên các tham số chuỗi).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi chuyển đổi kiểu dữ liệu khi nhập từ Excel sang SQL Server 2008

  2. Lệnh SUBSTRING trong SQL:A Primer

  3. Tại sao kết nối ODBC của tôi không thành công khi chạy tải SSIS trong Visual Studio nhưng không phải khi chạy cùng một gói sử dụng Tiện ích gói thực thi

  4. Làm thế nào để có được Visual Studio 2008 để chỉnh sửa các dự án báo cáo SSRS 2005 w / o Cài đặt SQL Business Intelligence Development Studio 2005?

  5. Sử dụng XQuery trong Linq To SQL?