1

このクエリは、特定の値を持つすべての列を特定し、JSON にエクスポートするための名前と値のペアを作成するために最終的に使用する概念を証明するものです。しかし、私は立ち往生しています。

SQL テーブルのすべての列のリストをクエリします。次に、Table1 の列を 1 行ずつ調べて、変数を使用して値を更新し、クエリを作成します。たとえば、Col4 = "Old text" の場合にリストを読み取ると、Col 4 = "New Text" の値を設定したいと思います。

DECLARE @c varCHAR(100)
DECLARE ReadData CURSOR
FOR SELECT cname FROM sys.syscolumns WHERE creator = 'dbserver' AND tname = 'Table1' 
    DECLARE @RowCount INT

SET @RowCount = (SELECT COUNT(cname) FROM sys.syscolumns WHERE creator = 'dbserver' AND tname = 'Table1')
OPEN ReadData

DECLARE @I INT // iterator

SET @I = 1 // initialize
WHILE (@I <= @RowCount)
BEGIN
FETCH NEXT ReadData INTO @c

INSERT INTO serverdb.Table2 (cname)VALUES(@c)// this works inserting all 100 columns in the cname column of Table 2

UPDATE serverdb.Table1 SET @c = 'New text' WHERE @c = 'Old text'// this fails with a syntax error. @c is not being interpreted for the query. Note: If I hard code the @c var (for testing)to a known column name, the query works as well

SET @I = @I  + 1
END;

update ステートメントが変数を認識しないのはなぜですか? 私は何が欠けていますか?

4

1 に答える 1

1

以下のように varibale を使用すると、文字列と見なされます。

UPDATE serverdb.Table1 SET @c = 'New text' WHERE @c = 'Old text'

動的クエリを作成する必要があります。execute メソッドを使用して動的クエリを実行する

declare @sql varchar(999)
SELECT @sql = 'UPDATE serverdb.Table1 SET '+ @c + '= ''New text'' WHERE '+ @c+ ' = ''Old text'' '
execute(@sql)

お役に立てれば

于 2012-05-24T03:52:55.243 に答える