--用动态SQL执行,example
exec('IF EXISTS (SELECT 1 FROM '+@dd+'
      WHERE 销售编号 LIKE '+@bj+'SUBSTRING(CONVERT(varchar(8),
         GETDATE(), 112), 1, 8)''%''')

解决方案 »

  1.   

    用动态SQL语句动态sql语句基本语法 
    ------------------------------------------------------------------------------------
    1、:普通SQL语句可以用Exec执行 
    eg:
    Select * from tableName 
    Exec('select * from tableName') 
    Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
    2、字段名,表名,数据库名之类作为变量时,必须用动态SQL 
    eg:
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName') -- 请注意,加号前后的单引号的边上加空格 --当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s) -- 成功 
    exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s) -- 成功
    exec sp_executesql @s -- 此句正确
    3、 输出参数 
    declare  @num int, 
    @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) --如何将exec执行结果放入变量中? 
    declare  @num int, 
    @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  2.   

    用动态sql:CREATE PROCEDURE [jhcgbm] 
    @bj varchar(2),
    @dd varchar(20)
    AS
    declare @sql varchar(2000)
    set @sql='IF EXISTS (SELECT 1
                FROM '+@dd+' WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) + ''%'') BEGIN
        SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
      FROM '+@dd+'  WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) 
            + ''%'' END ELSE BEGIN
                SELECT TOP 1 CONVERT(numeric(11,0), CONVERT(varchar(8), GETDATE(), 112) + ''000'', 112) + 1 AS 单据号
              FROM '+@dd+'  END'
    exec(@sql)
    GO
      

  3.   

    --动态SQL,如下:
    declare @tableName varchar(20)
    set @tableName='T'
    exec('select * from '+@tableName+'')
      

  4.   

    各位好向不行把,如果把@bb换成 '+@bb+'告诉我有语法错误呀
      

  5.   

    服务器: 消息 170,级别 15,状态 1,行 5
    第 5 行: ' +@tableName+ ' 附近有语法错误。
      

  6.   

    CREATE PROCEDURE [jhcgbm] 
    @bj varchar(2),
    @dd varchar(20)
    AS
    declare @sql varchar(2000)
    set @sql='IF EXISTS (SELECT 1
                FROM '+@dd+' WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) + ''%'') BEGIN
        SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
      FROM '+@dd+'  WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) 
            + ''%'' END ELSE BEGIN
                SELECT TOP 1 CONVERT(numeric(11,0), CONVERT(varchar(8), GETDATE(), 112) + ''000'', 112) + 1 AS 单据号
              FROM '+@dd+'  END'
    exec(@sql)
    GO
    这段代码可以执行的,但怎么返回结果呀
      

  7.   

    CREATE PROCEDURE jhcgbm 
    @bj varchar(2),
    @dd varchar(20)
    AS
    BEGIN
        declare @i int
        declare @s nvarchar(4000)
        set @s =  N'SELECT @i=1 FROM '+@dd
                + N' WHERE 销售编号 LIKE '''+@bj
                + N'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%'''
                
        exec sp_executesql @s,N'@i int out',@i out     if @i=1
        BEGIN
            exec('SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
                  FROM ' +@dd+' WHERE  销售编号 
                  LIKE '''+@bj+'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%''') 
        END 
        ELSE 
            exec('SELECT TOP 1 CONVERT(numeric(11,0),CONVERT(varchar(8),GETDATE(),112)+''000'',112)+1 AS 单据号 
                  FROM '+@dd)
    END
    GO
      

  8.   

    CREATE PROCEDURE [jhcgbm] 
    @bj varchar(2),
    @dd varchar(20)
    AS
    declare @sql varchar(2000)
    set @sql='IF EXISTS (SELECT 1
                FROM '+@dd+' WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) + ''%'') BEGIN
        SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
      FROM '+@dd+'  WHERE 销售编号 LIKE '+@bj +' SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8) 
            + ''%'' END ELSE BEGIN
                SELECT TOP 1 CONVERT(numeric(11,0), CONVERT(varchar(8), GETDATE(), 112) + ''000'', 112) + 1 AS 单据号
              FROM '+@dd+'  END'
    exec(@sql)
    GO
      

  9.   

    CREATE PROCEDURE jhcgbm
    @bj varchar(2),
    @dd varchar(20)
    AS
    BEGIN
        declare @i int
        declare @s nvarchar(4000)
        set @s =  N'SELECT @i=1 FROM '+@dd
                + N' WHERE 销售编号 LIKE '''+@bj
                + N'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%'''
                
        exec sp_executesql @s,N'@i int out',@i out     if @i=1
        BEGIN
            exec('SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
                  FROM ' +@dd+' WHERE  销售编号 
                  LIKE '''+@bj+'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%''') 
        END 
        ELSE 
            exec('SELECT TOP 1 CONVERT(numeric(11,0),CONVERT(varchar(8),GETDATE(),112)+''000'',112)+1 AS 单据号 
                  FROM '+@dd)
    END
    GO=========================================================
    我的回复,尽可能为你分忧解难!
    BLOG:blog.csdn.net/softj --欢迎光临,有更多信息等着你!
    QQ群:8476022专研数据库          --大家进来聊一聊!
    MSN:[email protected] --这不常用!
    Mail:[email protected] --有什么问题可以和我来EMAIL!
    =========================================================