この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 11521|答える: 0

[出典] 通常のSQL文はexecで実行可能です

[リンクをコピー]
掲載地 2015/02/09 14:44:30 | | |
1: 通常のSQL文はexecで実行可能です

テーブル名から*を選択してください
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- 文字列の前にNを加える必要があることに注意してください

2: フィールド名、テーブル名、データベース名などを変数として使用する場合、動的SQLを使用しなければなりません

ヴァルチャー@fname宣言(20)
set @fname = 'FiledName'
tableName -- Errorから@fnameを選択してください。エラーは出ませんが、結果は固定値のFiledNameになってしまい、これは望んでいるものではありません。
exec('select ' + @fname + ' from tableName') -- プラス記号の前後に単一引用符の横にスペースが追加されていることに注意してください

もちろん、文字列を変数の形に変えることもできます
ヴァルチャー@fname宣言(20)
set @fname = 'FiledName' -- フィールド名を設定する

ヴァルハル@s宣言(1000)
set @s = 'select ' + ' @fname + ' from tableName'
exec(@s) -- 成功
exec sp_executesql @s -- この文は誤りを報告します

@s Nvarchar(1000)と宣言してください ― ここでnvarchar(1000)に変更されていることに注意してください。
set @s = 'select ' + ' @fname + ' from tableName'
exec(@s) -- 成功
エグゼクティブsp_executesql @s――この文は正しいです

3. 出力パラメータ
Declare @num int, @sqls Nvarchar(4000)
set @sqls='table Nameからcount(*) を選択'
エグゼクティブ(@sqls)

--執行執行の結果を変数にどうやって入力すればいいですか?

Declare @num int, @sqls Nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
選択@num


1: 通常のSQL文はExecで実行可能例:tableNameから*を選択する
                Exec('select * from tableName')
                Exec sp_executesql N'select * from tableName' -- 文字列の前にNを加える必要があることに注意してください

2: フィールド名、テーブル名、データベース名などを変数として使用する場合、動的SQLを使用しなければなりません

    エラー:ヴァルチャー@fname宣言(20)
                set @fname = 'FiledName'
                tableName -- Errorから@fnameを選択してください。エラーは出ませんが、結果は固定値のFiledNameになってしまい、これは望んでいるものではありません。
    正解:Exec('select ' + @fname + ' from tableName') -- 単一引用符の前後にスペースが追加されているのに注目してください

    もちろん、文字列を変数の形に変えることもできます
                ヴァルチャー@fname宣言(20)
                set @fname = 'FiledName' -- フィールド名を設定する

                ヴァルハル@s宣言(1000)
                set @s = 'select ' + ' @fname + ' from tableName'
                エグゼクティブ(@s)――成功
                exec sp_executesql @s -- この文は誤りを報告します

              --注:パラメータ@s ntext、nchar、nvarchar型でなければならず、varchar(1000)を宣言@s nvarchar(1000)@s宣言に変更する必要があります。



               以下は以下の通りです。
                @s Nvarchar(1000)と宣言してください ― ここでnvarchar(1000)に変更されていることに注意してください。

                set @fname = 'FiledName' -- フィールド名を設定する
                set @s = 'select ' + ' @fname + ' from tableName'
                エグゼクティブ(@s)――成功   
                エグゼクティブsp_executesql @s――この文は正しいです

3. 入力または出力パラメータ

      (1) 入力パラメータ:
          @QueryString nvarchar(1000) -- 動的クエリ文変数(注:ntextまたはnchar nvarchar型でなければならず、varchar型ではない)
          nvarchar(200) @paramstring宣言 - 動的文のパラメータ列を設定する(注:ntextまたはnchar nvarchar型でなければならず、varchar型ではない)
          Declare @input_id int - 動的文に渡すパラメータの値を定義します

          set @QueryString='select * from tablename (id=@id' -idはフィールド名、@idは渡すパラメータです
          set @paramstring='@id int' -- 動的文のパラメータを定義する文字列を設定します。
          Set @input_id =1 -- 動的文で渡されるパラメータの値を1に設定します
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          複数のパラメータがある場合:
          @QueryString nvarchar(1000) -- 動的クエリ文変数(注:ntextまたはnchar nvarchar型でなければならず、varchar型ではない)
          nvarchar(200) @paramstring宣言 - 動的文のパラメータ列を設定する(注:ntextまたはnchar nvarchar型でなければならず、varchar型ではない)
          Declare @input_id int - 動的文に渡すパラメータの値、パラメータ1を定義します
          Declare @input_name varchar(20) - 動的文に渡す引数の値を定義します。パラメータ2

          Set @QueryString='Select* from tablename (id=@id および name=@name' -id と name はフィールド名、@id と @name は渡すパラメータです
          Set @paramstring='@id int,@name varchar(20)' -- 動的文のパラメータ定義の文字列を「」で区切って設定します。
          Set @input_id =1 -- 動的文で渡されるパラメータの値を1に設定します
          set @input_name='Zhang San' --動的文で渡すパラメータの値を「Zhang San」に設定します。
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- 引数の順序に注目
     (2) 出力パラメータ
             Declare @num int, @sqls Nvarchar(4000)
            set @sqls='table Nameからcount(*) を選択'
            エグゼクティブ(@sqls)
        --執行執行の結果を変数にどうやって入力すればいいですか?         
        宣言 @QueryString nvarchar(1000) -- 動的クエリ名変数(注:ntext または nchar nvarchar タイプでなければならず、varchar タイプではありません)
        nvarchar(200) @paramstring宣言 - 動的文のパラメータ列を設定する(注:ntextまたはnchar nvarchar型でなければならず、varchar型ではない)
        int @output_result 宣言 - クエリ結果が@output_resultに割り当てられます

        Set @QueryString='select @totalcount=count(*) from tablename' --@totalcount は出力パラメータです
        Set @paramstring='@totalcount int output' -動的文のパラメータで定義された文字列を「」で区切って設定します。
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result 出力
        セレクト@output_result
        もちろん、入力パラメータと出力パラメータは一緒に使うこともできるので、自分で試してみることもできます。
        さらに、動的文クエリの結果セットを出力したい場合は、一時テーブルを使う次の方法を思い浮かべますが、他に良い方法があるかはわかりません。
        もし object_id('[tempdb].[ dbo].#tmp')はnullではありません -- 一時テーブル #tmp 存在するか確認し、存在する場合は削除してください
            ドロップテーブル #tmp
        tablenameから*を #tmp に選択し、1=2の場合 -- tablenameと同じ構造で一時テーブル #tmp を作成します

        宣言 @QueryString nvarchar(1000) -- 動的クエリ名変数(注:ntext または nchar nvarchar タイプでなければならず、varchar タイプではありません)
        set @QueryString='テーブル名から* 選択 '
        #tmp(field1, field2,...) exec(@querystirng)に挿入




先の:テーブルデータの空にするためのSQLメソッド
次に:最近のSQLノート
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com