为EXEC sp_executesql的@variable分配语句时出现等号问题

为EXEC sp_executesql的@variable分配语句时出现等号问题,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,您好:我正在尝试将下面的Insert和select语句封装到一个变量中,以便SQL运行 当等号包含在评估中(或就在附近)时,就会出现问题 CustomPollerAsignmentId列必须强制转换,因为它本机是一个PK和一个uniqueidentifier(见图) 当传递到sp_executesql时,必须做什么才能使语句正确计算? 我收到一个语法错误,如下所示 declare @date datetime, @query nvarchar(Max) set @date = getdate(

您好:我正在尝试将下面的Insert和select语句封装到一个变量中,以便SQL运行

当等号包含在评估中(或就在附近)时,就会出现问题 CustomPollerAsignmentId列必须强制转换,因为它本机是一个PK和一个uniqueidentifier(见图)

当传递到sp_executesql时,必须做什么才能使语句正确计算? 我收到一个语法错误,如下所示

declare 
@date datetime,
@query nvarchar(Max)
set @date = getdate()-4
set @query = --'Insert into [SolarWindsOrion].[dbo].[BWC_VPN_Hourly_Long_Store]
                'SELECT * FROM [SolarWindsOrion].[dbo].[CustomPollerStatistics_Hourly]
                where Cast(CustomPollerAssignmentID as nvarchar(max)) = 63FEB60-4516-4C1A-9A11-DB30ACA44301'
                
EXEC sp_executesql @query

更新--> 我尝试添加单引号。 当语句执行时。。不返回任何结果。见下图

您需要像下面这样引用它,
'63FEB60-4516-4C1A-9A11-DB30ACA44301'
,因此您的临时查询如下所示:

  declare 
    @date datetime,
    @query nvarchar(Max)
    set @date = getdate()-4
    set @query = --'Insert into [SolarWindsOrion].[dbo].[BWC_VPN_Hourly_Long_Store]
                    'SELECT * FROM [SolarWindsOrion].[dbo].[CustomPollerStatistics_Hourly]
                    where Cast(CustomPollerAssignmentID as nvarchar(max)) = ''63FEB60-4516-4C1A-9A11-DB30ACA44301'''
                    
    EXEC sp_executesql @query

guid(
newid
s)需要用引号括起来。您也不需要强制转换该列。您的
WHERE
应该是
WHERE customPollerasignmentId='63FEB60-4516-4C1A-9A11-DB30ACA44301'
(显然要将引号转义为“动态语句”),当您的查询没有任何动态时,为什么要使用
sys.sp_executesql
?我也不认为需要变量
@date
,因为它从未被使用过。我尝试了您建议的单引号,但有趣的是,我收到了错误“从字符串转换为uniqueidentifier时转换失败”。。确实执行了,但未返回任何结果。我会在原稿上附上一张图片problem@runatyr这可能是因为您的表中没有cod,请在数据中进行调查,您的代码现在应该可以了谢谢您Eshirvana。在我发布的第二张图片中,我在两个单独的窗口中显示了相同的select语句。。顶部窗口是一个直接选择窗口,它返回数据。图像的下半部分按照建议运行,没有从同一个表返回任何数据。我错过什么了吗?我将在输出where语句数据返回时进行三次检查:)。。所以where部分中的某些内容无法匹配,返回的0个结果代码是不同的,在您的屏幕截图中,您的代码以663F开头。。。但在你的第二次选择中,它开始时像63F,因此,修复您正在比较的代码nnnndd您是正确的…:)我非常感谢你在这件事上的帮助。请好好享受你的一天,知道你和这个网站帮了很大的忙。最亲切的问候!!