【问题标题】:TSQL data types incompatible in the subtract operator减法运算符中的 TSQL 数据类型不兼容
【发布时间】:2018-04-09 00:13:43
【问题描述】:

我正在使用 while 循环遍历某些表并在字段上执行替换,以删除所有连字符。所有字段都是varchar。

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

我收到的错误是:

数据类型 varchar(max) 和 varchar 在减法运算符中不兼容。

我尝试将 varchar 变量更改为固定长度或全部更改为最大值,但似乎没有任何效果。

【问题讨论】:

    标签: sql-server tsql while-loop


    【解决方案1】:

    在字符串内创建单引号时需要使用两个单引号:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多