您的位置:首页 > 数据库

存储过程调用表名为变量...(含基本sql语法说明)

2011-03-30 17:55 369 查看
1.什么时候用+号?

---- 为了组成一个字符串类型的语句,要用+号作连接符。 一般情况下,字符串与字符串变量连接时才用加号。

如:DECLARE @SQL NVARCHAR(1000),@tablename nvarchar(100),@SORTFIELD NVARCHAR(100)
SELECT @TABLENAME=N'MYTABLE',@SORTFIELD=N'USERCODE'
SET @SQL=N'SELECT * from '+@tablename+N' order by '+@FIELDSORT '
这样的组成的SQL语句是:
SELECT * from MYTABLE order by USERCODE

2.什么时候用引号:

----常数字符串都要用引号,如上面例子的N'SELECT * FROM '

3.什么时候用空格:
----一般连接关键字的引号内侧要加一空格,如:N'SELECT * from '+@tablename

FROM 后面要加空格,否则连接后会成为:SELECT * FROMMYTABLE,FROM 和MYTABLE连起来了,从而出错。

4.其它要注意的:---生成后字串中有引号的语句。

比如要生成这样一个语句:SELECT * FROM MYTABLE WHERE USERCODE=''
这样写是不对的:SET @SQL=N'SELECT * from '+@tablename+' WHERE USERCODE='' '
这样才是对的:SET @SQL=N'SELECT * from '+@tablename+' WHERE USERCODE=N'''' '
可以看出:在字串中间的两个引号变成了4个。总结一下:语句中间需要显示出的引号,引号个数要加倍


----------示例如下:

CREATE PROCEDURE [dbo].[PROC_M_B3_LQ]
@F_GSID	CHAR(10),
@F_ZZRQ	INT	,
@TABLENAME VARCHAR(40),	--计算数据表名
@FIELDNAME VARCHAR(20), --字段数据
@TYPE      INT,	 --类型:0-季度;1-年度(过去12个月)
@VALUES MONEY OUTPUT	--输出计算结果
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@SQL        VARCHAR(2000) ------动态SQL生成缓存数据

IF EXISTS(SELECT * FROM tedb.dbo.sysobjects WHERE [name]='##B3' and type='U') drop table ##B3
CREATE TABLE ##B3 (F_GSID CHAR(10),F_ZZRQ INT,F_VALUES MONEY,
CONSTRAINT [PK_##B3_1] PRIMARY KEY CLUSTERED
(
F_GSID ASC,
F_ZZRQ ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

SET @SQL='INSERT INTO ##B1T03(F_GSID,F_ZZRQ,F_VALUES)
SELECT F_GSID,dbo.fn_datetoint(F_ZZRQ),(SELECT TOP(1)  '+@FIELDNAME+'  FROM  '+@TABLENAME+'  WHERE F_GSID=M.F_GSID  AND dbo.fn_datetoint(F_ZZRQ)=dbo.fn_datetoint(M.F_ZZRQ) AND F_BBFL=''C'' ) FROM '+@TABLENAME+' AS M  WHERE F_GSID='''+@F_GSID+''' AND F_BBFL=''C'''
EXEC (@SQL)
.
.
.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐