使用环境 SQL SERVER 2005测试代码
declare @DataBaseName nvarchar(20);
SET @DataBaseName='RH' SELECT *
FROM @DataBaseName+'.dbo.INVMB'错误提示:
Incorrect syntax near '+'.因为经常需要使用不同的数据库,所以想在存储过程中
EXEC ‘RH’ 或 EXEC ‘LOOS’ 直接修改数据库就很简单了
请问该怎样修改才能实现
declare @DataBaseName nvarchar(20);
SET @DataBaseName='RH' SELECT *
FROM @DataBaseName+'.dbo.INVMB'错误提示:
Incorrect syntax near '+'.因为经常需要使用不同的数据库,所以想在存储过程中
EXEC ‘RH’ 或 EXEC ‘LOOS’ 直接修改数据库就很简单了
请问该怎样修改才能实现
SET @DataBaseName='RH' exec('SELECT * FROM ' + @DataBaseName + '.dbo.INVMB')当数据库名,表名,列名为变量时,需要拼接SQL,动态执行之.
declare @DataBaseName nvarchar(20),@sql varchar(2000)
SET @DataBaseName='RH' set @sql='SELECT * FROM '+@DataBaseName+'.dbo.INVMB'
print @sql ---SELECT * FROM RH.dbo.INVMB
FROM ’+@DataBaseName+'+'.dbo.INVMB')
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go/* 查询显示辅料报表 4,5,6 字头 使用部门:工程部
sp_helptext [ENGQUERY] --显示用于在多行中创建对象的定义:内容
sp_help [ENGQUERY] --显示用于在多行中创建对象的定义,如参数等
drop proc [ENGQUERY] --删除报表
exec [ENGQUERY] 'RH','6'
能在存储过程中直接插入 EXEC 命令当然可以调用存储过程
*/ALTER PROCEDURE [dbo].[ENGQUERY]
@DataBaseName nvarchar(20),
@NUM NVARCHAR(8)
as
create table #ENGQUERY(品号 nvarchar(20),品名 nvarchar(60),规格 varchar(60),单位 VARCHAR(4),
采购单位 nvarchar(8),计价单位 nvarchar(8),主要仓库 nvarchar (8)
)
begin
declare @sql nvarchar(200)
set @sql='SELECT MB001,MB002,MB003,MB004,MB148,MB149,MB017 FROM '+@DataBaseName+'.dbo.INVMB where MB001 LIKE '+''''+@NUM+'%'''
-- print @sql ---SELECT * FROM RH.dbo.INVMB
INSERT INTO #ENGQUERY
-----调用SQL语句
EXEC (@sql)
----调用存储过程 AAA 存储过程如下
----EXEC AAAend
SELECT 品号, dbo.F_Gb2Big(品名,1) as 品名, dbo.F_Gb2Big(规格,1) as 规格,dbo.F_Gb2Big(单位,1) as 库存单位, dbo.F_Gb2Big(采购单位,1) as 采购单位, dbo.F_Gb2Big(计价单位,1) as 计价单位,主要仓库 FROM #ENGQUERY
DROP TABLE #ENGQUERY/*
/*EXEC AAA*/
ALTER PROCEDURE AAA
AS
BEGIN
SELECT MB001,MB002,MB003,MB004,MB148,MB149,MB017 FROM RH.dbo.INVMB where MB001 LIKE '6%'
END*/