Có một khái niệm về một người dùng bao gồm tập tin trong máy chủ SQL không?


19

Tôi có một tập các kịch bản cần được chạy theo một thứ tự nhất định. Tôi muốn tạo một "tệp chủ" liệt kê tất cả các tệp khác và thứ tự đúng của chúng. Về cơ bản giống như một tệp bao gồm từ C ++ hoặc ASP / VBScript.

Câu trả lời:


19

Nếu bạn đang sử dụng SQLCMD , bạn có thể sử dụng :r FileNameđể bao gồm một tệp .sql riêng.

: r Tên tệp

Phân tích các câu lệnh T-SQL bổ sung và các lệnh SQLCMD từ tệp được chỉ định bởi FileName vào bộ đệm của câu lệnh. Tên tệp được đọc liên quan đến thư mục khởi động cho Visual Studio. Các tập tin được đọc và thực hiện sau khi gặp một bộ kết thúc hàng loạt. Bạn có thể phát hành nhiều lệnh: r. Tệp có thể bao gồm bất kỳ lệnh SQLCMD nào, bao gồm cả bộ kết thúc hàng loạt được xác định trong Công cụ, Tùy chọn. Bạn có thể sử dụng: r trong tập lệnh triển khai trước hoặc sau triển khai để bao gồm các tập lệnh khác.


Bạn đang sử dụng tính năng này cho mình?
bernd_k

Tôi đang sử dụng nó rất nhiều trong các dự án SQL Server Data Tools. Nó thực sự hữu ích khi tôi đang cố gắng sắp xếp dữ liệu mẫu chạy dưới dạng tập lệnh.
Jonathan Allen

4

Theo nghĩa của các tiền xử lý C cổ đại chắc chắn không có

  • T-SQL tự nó không có khái niệm như vậy
  • sqlcmd và sqlcmdmode của SSMS không xử lý các đường dẫn tệp tương đối
  • sqlcmd và sqlcmdmode của SSMS không hỗ trợ điều kiện bao gồm

Nếu bạn có một tập hợp các tệp có đường dẫn tuyệt đối mà bạn muốn đưa vào theo thứ tự vô điều kiện, bạn có thể sử dụng công cụ dòng lệnh sqlcmd hoặc sử dụng SSMS trong sqlcmdmode như được đề cập bởi @mfredrickson và @Marian.


Nhưng nếu bạn muốn các đường dẫn tương đối hoặc có điều kiện bao gồm, bạn cần sử dụng một số trình bao bọc gọi sqlcmd (hoặc một trong những tiền thân không dùng nữa của nó là isql hoặc osql).

Hiện tại trong công việc của tôi trong tình huống này, tôi đang xem xét và mở rộng mã vbs và hta cũ. Tôi không hoàn toàn hạnh phúc, nhưng đó là một quyết định thực dụng. Nó đang hoạt động và người dùng cuối đang ở nhà với GUI hta và không cần cài đặt phần mềm bổ sung.

Đối với một thiết kế mới, tôi sẽ bắt đầu nghĩ đến việc sử dụng WPF và PowerShell để thực hiện các cuộc gọi của sqlcmd, nhưng với các khách hàng hiện tại của chúng tôi, tôi không thể đoán được sự hiện diện của PowerShell V2.

Trong những lần trước, chúng tôi đã viết các lô cmd đơn giản cho mục đích này, một vài trong số chúng vẫn được sử dụng.

Tôi đoán có những công cụ hiện tại, đặc biệt là những công cụ nhắm mục tiêu Workflows, có thể phù hợp ở đây. Tôi không quen thuộc với những người đó.


3

Cùng với chế độ SQLCMD trong Management Studio, bạn cũng có thể sử dụng tệp bó để sử dụng làm tệp chính để sắp xếp và gọi tất cả các tệp sql của mình bằng cách sử dụng tiện ích SQLCMD .

Chế độ SQLCMD là một mô phỏng về việc sử dụng tiện ích bên trong Studio quản lý, do đó không có sự khác biệt lớn giữa các chế độ. Ngoại trừ việc đôi khi tôi thích chạy các đợt (không mở M Studio nữa ... tải db chính xác ... vv). Tôi thích cấu hình mọi thứ trong lô, bao gồm các tệp đầu ra.


2

Tôi đồng ý, một bộ tiền xử lý T-SQL rất cần thiết. Tôi đã phát triển một cái riêng của mình trong C #, khiến tôi mất cả tiếng đồng hồ. Bên cạnh việc kiểm soát thứ tự thực thi các tập lệnh SQL, nó cũng cho phép tôi có các macro trông giống như UDF vô hướng và thuận tiện để sử dụng, nhưng hoạt động nhanh như UDF nội tuyến.


+1 - Tôi đã thực hiện loại điều đó với các công cụ tạo khuôn mẫu trong một số trường hợp. Mặc dù sqlcmd có một số phương tiện để thay thế thay đổi, tôi sẽ cung cấp cho ai đó đã triển khai một plugin tiền xử lý macro tốt cho SSMS một nụ hôn lớn ở phía dưới.
Mối quan tâmOfTunbridgeWells

1
@AK, bạn có phiền khi nói thêm về điều này không? Có lẽ gửi một số mã trên github?
craig

2

Tôi thích câu trả lời của bernd_k . Tùy thuộc vào cách bạn đặt tên cho các tập lệnh của mình, như bao gồm một số, SQL Server PowerShell (SQLPS) có thể được sử dụng nếu bạn đang chạy SQL Server 2008 trở lên. Sau đó, ngay cả khi bạn đang sử dụng SQL 2005, bạn có thể sử dụng PowerShell và SMO cho năm 2005.

Lưu ý bên lề: Tôi tin rằng SQLCMD cuối cùng sẽ được đưa vào danh sách không dùng nữa và đang được thay thế bằng SQLPS, PowerShell.

Có một vài lựa chọn khác là tốt.

  1. Thiết lập mỗi tập lệnh như một bước trong công việc Tác nhân SQL. Bạn có thể đặt thứ tự chúng được thực thi.
  2. Tạo một gói SSIS để gọi từng tệp. Điều này có thể cung cấp thêm một chút kiểm soát và cung cấp thêm một chút tùy chọn đăng nhập. Tôi thích phương pháp này nếu kết quả của một tập lệnh cần được xác minh trước khi thực hiện tiếp theo.

Tôi không nghĩ SQLCMD sẽ bị khấu hao vì nó rất quan trọng đối với cách thức hoạt động của các công cụ dữ liệu và máy chủ SQL của SQL Server.
Jonathan Allen

@Jonathan ALLen Nếu bạn tình cờ tìm thấy bất kỳ tài liệu hiện tại nào cho thấy việc quản lý các DACPAC bằng cách sử dụng, SQLCMDhãy cho tôi biết, vì hầu hết những gì tôi tìm thấy đều tham khảo PowerShell . Tôi cũng không thấy tài liệu tham khảo sqlcmdđược sử dụng với SSDT ngoại trừ có thể để so sánh lược đồ, nhưng tôi không bao giờ sử dụng các tập lệnh được tạo.
Shawn Melton

Các tập lệnh SSDT là các tập lệnh sqlcmd. Đó là cách nó xử lý các tham số, cả do người dùng định nghĩa và những thứ như tên cơ sở dữ liệu. Nếu bạn muốn triển khai DACPAC bằng SqlPackage.exe, liên kết này hiển thị cách truyền các tham số sqlcmd. msdn.microsoft.com/en-us/ trộm
Jonathan Allen
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.