解决存储过程中表名不允许为变量的问题

问题一:(解决表名为变量的问题)
-- =============================================
-- Author:  <Author,yansheng>
-- Create date: <Create Date,20080306>
-- Description: <Description,,>取得一个表中所有记录的总条数(为分页服务)
-- =============================================
ALTER PROCEDURE [dbo].[Common_GetAllTableInfo_Num]
  @tablename  varchar(20)
AS
DECLARE @sql   NVARCHAR(100);
BEGIN

 exec('SELECT count(*) as number
     from ' +@tablename)
 -- 》SELECT count(*) as number from  @tablename  这是错误的!
END

问题二:(解决动态sql问题)

-- =============================================
-- Author:  <yansheng>
-- Create date: <2008/03/06>
-- Description: <Description,販売一覧(0601),>
-- =============================================
ALTER PROCEDURE [dbo].[0601_SaleData_PartInfo]
    @shop_code        AS VARCHAR(5) = null        --店舗cd<=>店舗‘= null ’表示该参数可选
      ,@action_numbe     AS VARCHAR(14)= null        --受付番号<====>受付番号
      ,@carrier_code     AS NVARCHAR(2)= null       --キャリアマスタテーブルのキャリアCD<===>キャリア
      ,@machine_category AS NVARCHAR(50)= null      --商品マスタテーブルの機種<===>機種
      ,@jan_code         AS VARCHAR(13)= null       --JANコード<===>JAN
      ,@made_numbers     AS VARCHAR(11)= null       --製造番号<===>製造番号
      ,@contract_div     AS VARCHAR(5) = null       --契約区分
      ,@saledate_s       AS varchar(8)= null        --販売年月日start
      ,@saledate_e       AS varchar(8) = null       --販売年月日end
      ,@sup_user         AS VARCHAR(40)= null       --担当者

AS
    DECLARE @sql1   NVARCHAR(500);
    DECLARE @sql2   NVARCHAR(500);
    DECLARE @sqlall NVARCHAR(1000);
BEGIN
   
 
    -- 把“販売VIEW”和“地区代理店マスタ”关联起来,目的是想取出“地区代理店マスタ”中的“担当者”字段 
 SET @sql1='(
            SELECT 店舗CD
      ,受付番号
      ,販売年月日
      ,契約区分
      ,JANコード
      ,製造番号
      ,売掛金
      ,担当者    
      ,a.登録日
             FROM  販売VIEW AS a LEFT JOIN 地区代理店マスタ AS b
             ON  a.地区代理店CD=b.地区代理店CD
              ) AS c '
     -- 把“販売VIEW”和“商品マスタ”关联起来,目的是想取出“商品マスタ”中的“キャリアCD”字段和“機種”字段 
   SET @sql2='(
            SELECT 店舗CD
      ,受付番号
                  ,キャリアCD
                  ,機種
             FROM  販売VIEW AS d LEFT JOIN 商品マスタ AS e
             ON  d.JANコード=e.JANコード
                    ) AS f '
     
        SET @sqlall= 'SELECT c.店舗CD
       ,c.受付番号
       ,販売年月日
       ,契約区分
       ,キャリアCD
       ,機種
       ,JANコード
       ,製造番号
       ,売掛金
       ,担当者    
       ,登録日
                 FROM'+ @sql1+'LEFT JOIN'+ @sql2+'ON c.店舗CD=f.店舗CD AND c.受付番号=f.受付番号 WHERE 1=1 '
        IF @shop_code IS NOT NULL
              SET @sqlall=@sqlall+' AND c.店舗CD='+@shop_code
        IF @action_numbe IS NOT NULL
              SET @sqlall=@sqlall+' AND c.受付番号='+@action_numbe
        IF @carrier_code IS NOT NULL
              SET @sqlall=@sqlall+' AND f.キャリアCD='+@carrier_code
        IF @machine_category IS NOT NULL
              SET @sqlall=@sqlall+' AND f.機種='+@machine_category
        IF @jan_code IS NOT NULL
              SET @sqlall=@sqlall+' AND c.JANコード='+@jan_code
        IF @made_numbers IS NOT NULL
              SET @sqlall=@sqlall+' AND c.製造番号='+@made_numbers
        IF @contract_div IS NOT NULL
              SET @sqlall=@sqlall+' AND c.契約区分='+@contract_div
        IF @saledate_s IS NOT NULL
              SET @sqlall=@sqlall+' AND c.販売年月日>='+@saledate_s
        IF @saledate_e IS NOT NULL
              SET @sqlall=@sqlall+' AND c.販売年月日<='+@saledate_e
        IF @sup_user IS NOT NULL
              SET @sqlall=@sqlall+' AND c.販売年月日='+@sup_user
        --print(@sqlall)
        EXEC (@sqlall)
END


转载于:https://www.cnblogs.com/yansheng9988/archive/2008/03/05/1092447.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值