2017-10-27 36 views
0

私はwhileループを使用していくつかのテーブルを繰り返し、フィールドの置換を実行してすべてのハイフンを削除しています。すべてのフィールドがvarcharです。TSQLのデータ型が減算演算子で互換性がありません

DECLARE @Table TABLE (TableName VARCHAR(max),Id int identity(1,1)) 
INSERT INTO @Table 
Select distinct table_name From INFORMATION_SCHEMA.COLUMNS 
DECLARE @max int 
DECLARE @SQL VARCHAR(max) 
DECLARE @TableName VARCHAR(max) 
DECLARE @id int = 1 
select @max = MAX(Id) from @Table 
WHILE (@id <= @max) 
BEGIN 
    SELECT @TableName = TableName FROM @Table WHERE Id = @id 
    SET @SQL = 'update '+ @TableName +' set colA = replace(colA,'-','');' 
    EXEC(@SQL) 
SET @id = @id +1 
END 

Iは受信エラーがある:

データ型VARCHAR(MAX)とvarcharは減算演算子に互換性がありません。

varchar変数を固定長に変更するか、すべてをmaxに変更しようとしましたが、何も動作していないようです。

答えて

3

あなたは、文字列の中に単一引用符を作成するときに、2つの単一引用符を使用する必要があります:私は見

DECLARE @Table TABLE (TableName VARCHAR(max),Id int identity(1,1)) 
INSERT INTO @Table 
Select distinct table_name From INFORMATION_SCHEMA.COLUMNS 
DECLARE @max int 
DECLARE @SQL VARCHAR(max) 
DECLARE @TableName VARCHAR(max) 
DECLARE @id int = 1 
select @max = MAX(Id) from @Table 
WHILE (@id <= @max) 
BEGIN 
    SELECT @TableName = TableName FROM @Table WHERE Id = @id 
    SET @SQL = 'update '+ @TableName +' set colA = replace(colA,''-'','''');' 
    EXEC(@SQL) 
SET @id = @id +1 
END 
+0

ああ、ありがとうを! – joshi123

+0

あなたは大歓迎です! –

関連する問題