-1

数分前、私はテーブルRowをコピーする単純な構文(SQLサーバー)クエリのみを検索していました。

これは通常、ASP.netプロジェクトで作業しているときに、SQLSERVER管理スタジオ内のクエリを使用してデータをテストするときに時々行われます。したがって、ルーチンアクションの1つは、行をコピーし、必要な列を互いに異なるものに変更してから、クエリを使用してデータをテストすることです。

だから私は 、ダン・アトキンソンの答えとして、このストアドプロシージャに遭遇しました

しかし、それをすべての非テスト目的が保存されている場所に追加すると、それらをソートされた順序で保存できるので、区別できると思います。

プロジェクトで使用されているものからの「utils」または「testingPurpose」のもの

(管理ツリービュー内のデフォルトのフォルダーはProgrammabiltyです)これも別のフォルダーである可能性がありますか、これはオプションではありませんか?

そうでなければ、私は Utils. そのような接頭辞を考えました(他の方法が存在しない場合)

dbo.Utils.CopyTableRow
dbo.Utils.OtherRoutineActions ....

または、私が考えていたことを達成するための指定された方法があります。

4

1 に答える 1

0

これは私が作成した最初の「Util」ストアド プロシージャであり、Util_ を介して接頭辞を付けた唯一のソリューションであることがわかりました。

ALTER PROCEDURE [dbo].[Utils_TableRowCopy](
@TableName VARCHAR(50) ,
@RowNumberToCopy INT
)



AS
BEGIN

declare @RowIdentity sysname =
(SELECT name FROM sys.identity_columns WHERE object_id = object_id(@TableName)
 )

DECLARE @columns VARCHAR(5000), @query VARCHAR(8000);
SET @query = '' ;

SELECT @columns =
    CASE
        WHEN @columns IS NULL THEN column_name
        ELSE @columns + ',' + column_name
    END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (
    TABLE_NAME = LTRIM(RTRIM(@TableName))
    AND
    column_name <> LTRIM(RTRIM(@RowIdentity))
);

SET @query = 'INSERT INTO ' + @TableName + ' (' + @columns + ') SELECT ' + @columns + ' FROM ' + @TableName + ' WHERE ' + @RowIdentity + ' = ' + CAST(@RowNumberToCopy AS VARCHAR);

--SELECT SCOPE_IDENTITY();
declare  @query2 VARCHAR(100) =  ' Select Top 1 * FROM '+ @TableName +' Order BY ' + @RowIdentity + ' desc' ;
EXEC (@query);
EXEC (@query2);

終わり

于 2012-10-03T20:41:09.187 に答える