CREATE PROCEDURE [dbo].[sp_getAppByLgName] 
@loginName VARCHAR(32)
AS
BEGIN
SET NOCOUNT ON;

DECLARE @UserAppId NVARCHAR(256)
DECLARE @getAppSql NVARCHAR(4000)

SET @UserAppId = (SELECT UserAppId FROM tb_AppManager tam WHERE LOWER(tam .UserAccount) = LOWER(@loginName))  ---这里得到的值是com.mobile.iphone.xplatform#com.mobile.ipad.xplatform IF @UserAppId <> ''
BEGIN
              SELECT @getAppSql = 
'SELECT Name = tai.AppName_CN FROM tbAppInfo tai(NOLOCK) WHERE
charindex(tai.AppId,'+@UserAppId +')>0'

EXEC sys.sp_executesql @getAppSql

END
END如上,执行该存储过程,输入用户名后提示无法绑定由多个部分组成的标识符 "com.mobile.iphone.xplatform#com.mobile.ipad.xplatform"。,但是我把charindex(tai.AppId,'+@UserAppId +')>0中的@UserAppId换为"com.mobile.iphone.xplatform#com.mobile.ipad.xplatform就可以执行, 请问各位大侠,这是怎么回事啊,多谢了SQL存储select存储过程SQLSERVER

解决方案 »

  1.   

    CREATE PROCEDURE [dbo].[sp_getAppByLgName] @loginName VARCHAR(32)
    AS 
    BEGIN
        SET NOCOUNT ON;

        DECLARE @UserAppId NVARCHAR(256)
        DECLARE @getAppSql NVARCHAR(4000)

        SET @UserAppId = ( SELECT   UserAppId
                            FROM     tb_AppManager tam
                            WHERE    LOWER(tam.UserAccount) = LOWER(@loginName)
                            )  ---这里得到的值是com.mobile.iphone.xplatform#com.mobile.ipad.xplatform    IF @UserAppId <> '' 
            BEGIN
                SELECT  @getAppSql = 'SELECT Name = tai.AppName_CN FROM tbAppInfo tai(NOLOCK) WHERE
    charindex(tai.AppId,''' + @UserAppId + ''')>0'

    PRINT @getAppSql --你把@getAppSql print出来看看就知道了:CHARINDEX中的字符串两边需要加单引号'',看一下下面打印的结果
                EXEC sys.sp_executesql @getAppSql

            END
    END/*
    SELECT Name = tai.AppName_CN FROM tbAppInfo tai(NOLOCK) WHERE
    charindex(tai.AppId,'com.mobile.iphone.xplatform#com.mobile.ipad.xplatform')>0
    */
      

  2.   

    try this,CREATE PROCEDURE [dbo].[sp_getAppByLgName] 
    (@loginName VARCHAR(32))
    AS
    BEGIN
        SET NOCOUNT ON;
        DECLARE @UserAppId NVARCHAR(256)
        DECLARE @getAppSql NVARCHAR(4000)
         
        SET @UserAppId = (SELECT UserAppId FROM tb_AppManager tam WHERE LOWER(tam .UserAccount) = LOWER(@loginName))
     
        IF @UserAppId <> ''
            BEGIN
                      SELECT @getAppSql = 
                'SELECT Name = tai.AppName_CN FROM tbAppInfo tai(NOLOCK) WHERE
                    charindex(tai.AppId,'''+@UserAppId +''')>0'
                         
                EXEC sys.sp_executesql @getAppSql
            END
    END