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

Logic có điều kiện trong tập lệnh PostDeployment.sql sử dụng SQLCMD

CẬP NHẬT

Bây giờ tôi đã phát hiện ra rằng cú pháp if / else ở trên không phù hợp với tôi vì một số tập lệnh được liên kết của tôi yêu cầu câu lệnh GO. Về cơ bản:r chỉ nhập nội dòng các tập lệnh, vì vậy điều này trở thành sytax không hợp lệ.

Nếu bạn cần một câu lệnh GO trong các tập lệnh được liên kết (như tôi làm) thì không có cách nào dễ dàng để giải quyết vấn đề này, tôi đã kết thúc việc tạo một số tập lệnh triển khai bài đăng và sau đó thay đổi dự án của mình để ghi đè tập lệnh triển khai bài đăng chính tại thời điểm xây dựng tùy thuộc trên cấu hình bản dựng. Điều này hiện đang làm những gì tôi cần, nhưng có vẻ như sẽ có một cách dễ dàng hơn!

Đối với bất kỳ ai cũng cần điều tương tự - Tôi thấy bài đăng này hữu ích

Vì vậy, trong dự án của tôi, tôi có các tệp triển khai bài đăng sau:

  • Script.PostDeployment.sql (tệp trống sẽ được thay thế)
  • Default.Script.PostDeployment.sql (liên kết đến các tập lệnh cần thiết cho cấu hình dữ liệu chuẩn)
  • Configuration1.Script.PostDeployment.sql (liên kết đến các tập lệnh cần thiết cho một cấu hình dữ liệu cụ thể)

Sau đó, tôi thêm phần sau vào cuối tệp dự án (nhấp chuột phải để dỡ bỏ và sau đó nhấp chuột phải vào chỉnh sửa):

  <Target Name="BeforeBuild">
      <Message Text="Copy files task running for configuration: $(Configuration)" Importance="high" />
      <Copy Condition=" '$(Configuration)' == 'Release' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
      <Copy Condition=" '$(Configuration)' == 'Debug' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
      <Copy Condition=" '$(Configuration)' == 'Configuration1' " SourceFiles="Scripts\Post-Deployment\Configuration1.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
  </Target>

Cuối cùng, bạn sẽ cần thiết lập các cấu hình xây dựng phù hợp trong giải pháp.

Ngoài ra, đối với bất kỳ ai đang thử các cách giải quyết khác, tôi cũng đã thử cách sau mà không gặp may:

  1. Tạo một sự kiện xây dựng bài đăng để sao chép các tệp thay vì phải hack tệp dự án XML. Tôi không thể làm cho điều này hoạt động vì tôi không thể tạo đường dẫn chính xác đến tệp kịch bản triển khai bài đăng. Sự cố kết nối này mô tả sự cố

  2. Sử dụng các biến cho đường dẫn tập lệnh để chuyển đến lệnh:r. Nhưng tôi đã gặp một số lỗi với cách tiếp cận này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quyền cho PSExec chạy từ lệnh SQL

  2. CHỌN VÀO một biến bảng trong T-SQL

  3. java.sql.SQLException:Không tìm thấy trình điều khiển phù hợp cho jdbc:sqlserver

  4. Cách tìm số nhận dạng duy nhất tối ưu trong bảng trong SQL Server:sp_special_columns

  5. Tên phiên bản mặc định của SQL Server Express