我正在尝试构建一个动态SQL语句,该语句从给定文件 - > db登陆表中所有列的所有值中删除引号。
类似于:
Update table
set col1 = replace(col1, '"', ''),
col2 = replace(col2, '"', ''), ....
我正在使用此脚本动态构建语句。
declare @query As varchar(1000)
declare @tablename as varchar(50)
declare @field as VARCHAR(50)
set @tablename = 'Contact'
set @query = 'Update [buyerhero_staging].[dbo].[Contact] SET ';
DECLARE RecSet CURSOR FOR
SELECT
CONCAT(COLUMN_NAME, '=REPLACE(,', COLUMN_NAME, ',''"'', '''')') as setcol
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = @tablename;
OPEN RecSet
FETCH NEXT FROM RecSet INTO @field
WHILE @@FETCH_STATUS = 0
BEGIN
SET @query = CONCAT(@query, ' ',@field, ', ')
END
CLOSE RecSet
DEALLOCATE RecSet
SELECT @query
问题是这个脚本在无限循环中运行,我不知道为什么。 特别是因为select语句运行亚秒返回。
我错过了什么?
由于
答案 0 :(得分:1)
您在begin块中缺少一个fetch。因此,您的光标值永远不会改变。这就像忘记带有计数器的简单循环中的I = I ++或I = I +
...
WHILE @@FETCH_STATUS = 0
BEGIN
SET @query = CONCAT(@query, ' ',@field, ', ')
FETCH NEXT FROM RecSet INTO @field
END
CLOSE RecSet
...