我有这个简单的查询: -
update [Schema1].ReportData
set Qry = 'declare @cols nvarchar(max) select @cols = ''Code,Name,DateOfJoining'''
where ViewName = 'Rpt1'
但这是问题所在。我有50多个模式,所以我做了以下 (总结SQL):
WHILE (@i <= (SELECT MAX(idx) FROM @schema_table))
BEGIN
-- get the next record primary key
SET @schema_names = (SELECT schema_names FROM @schema_table WHERE idx = @i)
BEGIN TRY
DECLARE @sSQL nvarchar(500);
SELECT @sSQL = N'update '+@schema_names+'.ReportData set Qry='declare @cols nvarchar(max) select @cols = ''Code,FName,DateOfJoining ,CategoryName''' where ViewName='Rpt1''
EXEC sp_executesql @sSQL
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()+' '+@schema_names AS ErrorMessage;
END CATCH
-- increment counter for next record
SET @i = @i + 1
END
但是在这一行给我语法错误: -
SELECT @sSQL = N'update '+@schema_names+'.ReportData set Qry='declare @cols nvarchar(max) select @cols = ''Code,FName,DateOfJoining ,CategoryName''' where ViewName='Rpt1''
实际上我尝试过很多东西,比如使用双引号和&amp;转义字符。 怎么解决这个问题?
答案 0 :(得分:1)
希望我理解你的UPDATE声明:
SELECT @sSQL = N'update '+QUOTENAME(@schema_names)+'.ReportData
set Qry=''declare @cols nvarchar(max) select @cols = ''''Code,FName,DateOfJoining ,CategoryName''''''
where ViewName=''Rpt1'''
如果您正在使用任何数据库对象,最好使用QUOTENAME
返回一个Unicode字符串,其中添加了分隔符,以使输入字符串成为有效的SQL Server分隔标识符。
将为您执行此查询:
update [Schema1].ReportData
set Qry='declare @cols nvarchar(max) select @cols = ''Code,FName,DateOfJoining ,CategoryName'''
where ViewName='Rpt1'
因此,在运行此批处理后,Qry
将等于:
declare @cols nvarchar(max) select @cols = 'Code,FName,DateOfJoining ,CategoryName'
修改强>
另一种方法是使用CHAR(39)
(单引号):
SELECT @sSQL = N'update '+QUOTENAME(@schema_names)+'.ReportData
set Qry= '+CHAR(39) +'declare @cols nvarchar(max) select @cols = '+CHAR(39)+ CHAR(39)+'Code,FName,DateOfJoining ,CategoryName'+ CHAR(39) +CHAR(39) + CHAR(39) + '
where ViewName='+ CHAR(39)+'Rpt1'+ CHAR(39)