问题一:(解决表名为变量的问题)
-- =============================================
-- 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