質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

6149閲覧

バッチファイルからsql文に”:”を渡したい

alfald

総合スコア19

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2020/10/13 08:00

編集2020/10/13 08:09

前提・実現したいこと

":"を含む文字列をsqlに渡したい。

発生している問題・エラーメッセージ

Sqlcmd: ':'': 無効な引数です。

該当のソースコード

cmd

1/test3.bat/ 2@echo off 3setlocal 4 5set asd='iiji\' 6set kij='c^:' 7echo %kij% 8 9SQLCMD -S db -U User -P Password -d master -i test3.sql -v ASD=%asd% QWE=%kij%

sql

1/test3.sql/ 2declare @i char(20) = $(ASD); 3declare @j char(20) = $(QWE); 4print @i; 5print @j;

試したこと

バッチファイルではコロンの前に"^"をつけると表示されたが、sqlには渡せなかった。

補足情報(FW/ツールのバージョンなど)

sqlで実行できるなら"^"は取って構わない。

SQLServe2012
WindowsServer2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2020/10/13 12:16

とりあえずバッチファイル的には set asd='iiji\\' set kij='c^:' を set asd="iiji\\" set kij="c^:" とするべきですが、sqlcmd変数に\が含まれる場合の対処方法は別途調べる必要があります。(ざっくり検索してみても見つからない)
alfald

2020/10/13 23:56

'から”に変えるとasdの方がsqlにいかなくなりました。 "にしなければいけない理由や、何か違いがあるのでしょうか?
gentaro

2020/10/14 01:32

そもそもDOSコマンドプロンプトでエスケープが必要な文字列を表す引用符はダブルクォーテーションだからですが、ちょっと勘違いもあったので回答に書きます。
guest

回答1

0

ベストアンサー

bat

1@echo off 2setlocal 3 4set asd="'iiji\'" 5set kij="'c^:'" 6echo %kij% 7 8SQLCMD -S db -U User -P Password -d master -i test3.sql -v ASD=%asd% QWE=%kij%

でいける筈です。
内側のシングルクォートはSQL側での文字列のための引用符で、外側のダブルクォーテーションはDOSコマンドプロンプトで特殊文字を含む文字列のための引用符です。

投稿2020/10/14 01:32

gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alfald

2020/10/14 01:45

そうなんですね 実行することができました。 丁寧に答えてもらいありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問