那位大哥帮忙解析下带有问号的地方,是我比较疑惑的,初学者啊,谢了啊...
USE [noCommerce]
GO
/****** 对象:  StoredProcedure [dbo].[Nop_ProductLoadDisplayedOnHomePage]    脚本日期: 07/03/2010 14:18:09 ******/
SET ANSI_NULLS ON ?
GO
SET QUOTED_IDENTIFIER ON ?GO
ALTER ? PROCEDURE [dbo].[Nop_ProductLoadDisplayedOnHomePage]
(
@ShowHidden bit = 0,
@LanguageID int
)
AS
BEGIN
SET NOCOUNT ON ? SELECT 
        p.[ProductId],
dbo.NOP_getnotnullnotempty(pl.[Name],p.[Name]) as [Name], ? dbo.NOP_getnotnullnotempty(pl.[ShortDescription],p.[ShortDescription]) as [ShortDescription],
dbo.NOP_getnotnullnotempty(pl.[FullDescription],p.[FullDescription]) as [FullDescription],
p.[AdminComment], 
p.[ProductTypeID], 
p.[TemplateID], 
p.[ShowOnHomePage], 
dbo.NOP_getnotnullnotempty(pl.[MetaKeywords],p.[MetaKeywords]) as [MetaKeywords],
dbo.NOP_getnotnullnotempty(pl.[MetaDescription],p.[MetaDescription]) as [MetaDescription],
dbo.NOP_getnotnullnotempty(pl.[MetaTitle],p.[MetaTitle]) as [MetaTitle],
dbo.NOP_getnotnullnotempty(pl.[SEName],p.[SEName]) as [SEName],
p.[AllowCustomerReviews], 
p.[AllowCustomerRatings], 
p.[RatingSum], 
p.[TotalRatingVotes], 
p.[Published], 
p.[Deleted], 
p.[CreatedOn], 
p.[UpdatedOn]
FROM [Nop_Product] p
LEFT OUTER JOIN Nop_ProductLocalized pl with (NOLOCK) ON p.ProductID = pl.ProductID AND pl.LanguageID = @LanguageID
WHERE (p.Published = 1 or @ShowHidden = 1) and p.ShowOnHomePage=1 and p.Deleted=0 
order by p.[Name]
END

解决方案 »

  1.   

    SET ANSI_NULLS ON
    这个是指定对空值也就是NULL的判断符合ISO标准,也就是如果TB表某行COL1列的值是NULL,使用SELECT * FROM TB WHERE COL1=NULL不会返回该行。设置为OFF效果相反SET QUOTED_IDENTIFIER ON
    这个是设置可以使用双引号作为标识符分隔符,比如CREATE TABLE "TEST"(COL1 INT)这样的,如果这个选项是ON就能执行,OFF就不执行ALTER PROCEDURE ???
    修改名称为???的存储过程SET NOCOUNT ON
    设置不打印语句影响的行数as [Name]
    设置输出列的别名
      

  2.   

    这些是 SQL-92 设置语句,使 SQL Server 2000/2005 遵从 SQL-92 规则。 当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。 
    SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍会返回零行。 当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有不为 XYZ_value 也不为 NULL 的行。ALTER修改已创建的proc
    SET NOCOUNT ON 不返回影响行数
      

  3.   

    SET ANSI_NULLS ON ?
    GO
    SET QUOTED_IDENTIFIER ON ?这些都是定义语句符合 ISO 标准,基本不用管。
    比如:
    SET ANSI_NULLS { ON | OFF }
    当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍会返回零行。
    SET QUOTED_IDENTIFIER { ON | OFF }
    当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。
      

  4.   

    谢谢大哥,dbo.NOP_getnotnullnotempty(pl.[Name],p.[Name]) 这句呢?
      

  5.   

    ALTER ? PROCEDURE表示修改存储过程,这个你也不用管,新建是CREATE ,唉!
    SET NOCOUNT ON ?这同上。是标准定义,
    比如
    SET NOCOUNT { ON | OFF } 
    当 SET NOCOUNT 为 ON 时,不返回计数。当 SET NOCOUNT 为 OFF 时,返回计数。
      

  6.   

    这个NOP_getnotnullnotempty应该是另一个自定义的存储过程
    --执行以下脚本查看内容
    sp_helptext 'NOP_getnotnullnotempty'
      

  7.   

    dbo.NOP_getnotnullnotempty(pl.[Name],p.[Name])  执行一个带2个参数的函数
      

  8.   

    谢谢大哥们,with (NOLOCK) ON ?
    dbo.NOP_getnotnullnotempty(pl.[Name],p.[Name]) 这两句呢?
      

  9.   

    sp_helptext 'NOP_getnotnullnotempty'我查了一下,是另一个存储过程,with (NOLOCK) ON 呢?是什么意思呢?
      

  10.   

    NOP_getnotnullnotempty是自定义函数才对,刚在函数里找到,呵呵