sql >> データベース >  >> RDS >> Sqlserver

変数として渡されたテーブル名にidentity_insertを設定するにはどうすればよいですか

    コメントで与えられたブラッドの答えをバックアップするために、単一の動的クエリで挿入シーケンス全体を実行する MVCE を次に示します。 Kris のコメントによると、クエリが SqlInjection に対して脆弱であるため、データベース名がホワイト リストに登録されていることを確認してください (残念ながら、sp_executesql を介して動的 SQL でデータベース名をパラメータ化することはできません)。 )

    与えられた:

    CREATE TABLE TableName
    (
        ID INT IDENTITY(1,1)
    );
      

    単一のバッチを実行できます:

    DECLARE @strDBName VARCHAR(100) = 'MyDatabase';
    Declare @Query Varchar(MAX)
    SET @Query = 'SET IDENTITY_INSERT '+ @strDBName +'..TableName ON; '
    SET @Query = @Query + 'INSERT INTO '+ @strDBName 
     +'..[TableName](ID) SELECT COALESCE(MAX(ID), 0)+1 FROM '+ @strDBName +'..TableName; '
    SET @Query = @Query + 'SET IDENTITY_INSERT '+ @strDBName +'..TableName OFF;'
    EXEC(@Query)
      


    1. ANALYZEを使用してPostgreSQL統計をゼロ/スクラッチから再構築する最速の方法は何ですか?

    2. SQLServerの関数とストアドプロシージャ

    3. Laravelのパラメーターエラー

    4. すべてのテストファイルに対してJasminebeforeAllを実行する方法