0

テーブルに新しい主キーを入力する SQL スクリプトを作成しようとしています。

私が現在インターネット検索から持っているものは次のとおりです

DECLARE @IntVariable int;
DECLARE @Stringkey varchar(2);
DECLARE @SQLString nvarchar(500);
DECLARE @Intupdater nvarchar(500);

SET @IntVariable = 00000001;
SET @Stringkey = 'CD';

SET @SQLString = N'UPDATE Tri_Damen_Live.trimergo.calendar_details SET details_key = @Stringkey + @IntVariable';
SET @Intupdater = N'@IntVariable = @IntVariable+1'

EXECUTE sp_executesql @SQLString , N'@IntVariable INT' , N'@Stringkey VARCHAR(2)', @IntVariable, @Stringkey;

これで発生するエラーは

メッセージ 102、レベル 15、状態 1、行 1
「=」付近の構文が正しくありません。
メッセージ 137、レベル 15、状態 2、行 1
スカラー変数「@Stringkey」を宣言する必要があります。

私の問題についていくつか質問があります。誰かが私を助けてくれることを願っています

最初の質問: 私のint増量剤が間違っているようです。int の更新変数ステートメントを作成する方法はありますか?

2番目: int を 00000001 と宣言しました。私がこれを行う理由は、キーが合計で 10 文字の長さのセットである必要があるためです (例 'CD00000001' など)。これはこのように機能しますか、それとも別の方法がありますか?

3 番目の質問: トピックに記載されているとおりです。「スカラー変数 "@Stringkey" を宣言する必要があります。」エラー。Intstringkey 部分を削除しましたが、変数について同じエラーが表示されます。それらを上部で宣言し、同様に設定しました。私は何が欠けていますか?

サイド情報 :

この関数は、さまざまなテーブル サイズを持つ複数のデータベースに使用されます。したがって、一定量の更新ステートメントがないことを説明するには、この種の関数が必要です。

ここで作成される主キーは、Varchar(10)常に 10 文字の長さの文字列 ( ) である必要があります。ばかげた要件のように思えますが、このシステムを使用することが選択されました。

これを実行するために Microsoft SQL Server 2012 を使用しています。

4

3 に答える 3

3

1 そのような文字列に int を追加することはできません。intを文字列に変換する必要があります

   @Stringkey + convert(varchar(10),@IntVariable)

2 int は数値です。フォーマットしたい場合は、自分で行う必要があります。

   SET details_key = @Stringkey + right(''0000000000''+convert(varchar(8),@IntVariable),8)

3 の変数宣言sp_executesql

N'@IntVariable INT, @Stringkey VARCHAR(2)'

すなわち

EXECUTE sp_executesql @SQLString , N'@IntVariable INT, @Stringkey VARCHAR(2)', @IntVariable, @Stringkey;

または、使用を検討することもできますSEQUENCE- http://raresql.com/2013/06/21/sql-server-2012-how-to-generate-a-varchar-sequence-number-using-sequence-object/を参照してください

于 2013-09-16T08:29:25.523 に答える
1

の 2 番目のパラメーターは、すべてのパラメーター定義を含む単一のsp_executesql文字列にする必要があります。

EXECUTE sp_executesql @SQLString , N'@IntVariable INT,@Stringkey VARCHAR(2)', @IntVariable, @Stringkey;
于 2013-09-16T08:28:26.090 に答える
0
SET @SQLString = N'UPDATE Tri_Damen_Live.trimergo.calendar_details SET details_key = @Stringkey + @IntVariable';

@IntVariableを varchar に変換する必要がある@Stringkey + @IntVariable=> (string + int)を連結しようとしています

于 2013-09-16T08:29:46.320 に答える