查询参数存储过程

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

--名  称:SQL代码生成器

--功  能:生成单表的insert,update,语句,变量定义语句;程序默认第一个列为主键;减少开发者输入的时间
--EXEC GetSql 'ord_TdContract',3

ALTER                 PROCEDURE [dbo].[GetSql]
 @TableName VARCHAR(255), --表名
 @sqltype  int ,  --1插入SQL;2更新SQL;3变量定义;4存储过程变量定义,5简单格式的查询语句;6生成初始化数据的语句;7生成赋值语句,8带中文别名的查询
 @Para  varchar(100)='',
 @strMessage  varchar(4000)=NULL output
AS
DECLARE @strSql1 VARCHAR(8000)
DECLARE @strsql2 VARCHAR(8000)
DECLARE @TID INT
DECLARE @I INT
DECLARE @cNUM INT
DECLARE @cName varchar(100)
DECLARE @var VARCHAR(100)
DECLARE @datatype VARCHAR(100)
DECLARE @intRowCount int
DECLARE @strNull varchar(10)
DECLARE @xtype INT

SET @I=1
SET @strSql2=''
SET @strSql1=''
IF @sqltype=1
BEGIN
 SET @strSql1='INSERT INTO '+@TableName
 SET @strSql2='
  SELECT '
END
IF @sqltype=2
 SET @strSql1='UPDATE '+@TableName+' SET '
IF @sqltype IN (5,7,8)
 SET @strSql1='SELECT '

SET @TID=object_id(@TableName )

SELECT @intRowCount=COUNT(*) FROM syscolumns WHERE ID=@TID

DECLARE authors_cursor CURSOR FOR SELECT Name,dbo.bf_GetBaseType(xtype,prec,xprec,xscale) ,xtype
 FROM dbo.syscolumns WHERE ID=@TID ORDER BY colid

OPEN authors_cursor
FETCH NEXT FROM authors_cursor INTO @cName, @datatype,@xtype
WHILE @@FETCH_STATUS = 0
BEGIN
 IF @sqltype=1
 BEGIN
  SET @strSql1=@strSql1+CASE @I WHEN 1 THEN '('+@cName WHEN @intRowCount THEN ','+@cName+')' ELSE ','+@cName END
  SET @strSql2=@strSql2+'@'+@cName+CASE @I WHEN @intRowCount THEN '' ELSE ',' END
 END
 IF @sqltype=2
 BEGIN
  IF @I=1  
   SET @strSql2=@strSql2+'   WHERE '+@cName+'='+'@'+@cName+'  --'+dbo.bf_GetColProp(@tablename,@cName)
  ELSE
  BEGIN  
   SET @strSql1=@strSql1+@cName+'='+'@'+@cName+CASE @I WHEN @intRowCount THEN '' ELSE ',' END
   SET @strSql1=@strSql1+' --'+dbo.bf_GetColProp(@tablename,@cName)+'
    '   --换行
  END
 END
 IF @sqltype=3
  SET @strSql1=@strSql1+'DECLARE '+'@'+@cName+'  '+@datatype+' --'+dbo.bf_GetColProp(@tablename,@cName)+ '
'
 IF @sqltype=4
  SET @strSql1=@strSql1+'@'+@cName+'  '+@datatype+ ','+'  --'+dbo.bf_GetColProp(@tablename,@cName)+'
'
 IF @sqltype=5
  SET @strSql1=@strSql1+CASE @I WHEN 1 THEN @cName WHEN @intRowCount THEN ','+@cName+ ' FROM '+@TableName   ELSE ','+@cName END
 IF @sqltype=6
 BEGIN
  IF @xtype IN (61)
   SET  @strNull='1990-01-01'
  IF @Xtype in (62,56,108)
   SET @strNull='0'
  IF @Xtype IN (175,167)
   SET @strNull=''
  SET @strSql1=@strSql1+CASE @I WHEN 1 THEN 'SELECT '+'''INSERT INTO '+@TableName +' SELECT ''''''+ CONVERT(VARCHAR(1000),ISNULL('+@cName+','''+@strNull+'''))'

     WHEN @intRowCount THEN +'+'''''',''''''+CONVERT(VARCHAR(1000),ISNULL('+@cName+','''+@strNull+'''))' +'+'''''''' FROM '+@TableName

     ELSE '+'''''',''''''' +'+ CONVERT(VARCHAR(1000),ISNULL('+@cName+','''+@strNull+'''))' END

 END
 IF @sqltype=7
 BEGIN
  SET @strSql1=@strSql1 +'@'+@cName+'='+case when @Xtype in (175,167) then 'RTRIM(ISNULL('+@cName+',''''))' else @cName end +case @i when @intRowCount then ' FROM '+@TableName else ',' end
 END
 IF @sqltype=8
 BEGIN
  SET @strSql1=@strSql1+CASE @I WHEN 1 THEN @cName+' '+dbo.bf_GetColProp(@tablename,@cName)
     WHEN @intRowCount THEN ','+@cName+' '+dbo.bf_GetColProp(@tablename,@cName)+ ' FROM '+@TableName  
     ELSE ','+@cName+' '+dbo.bf_GetColProp(@tablename,@cName) END

 END

 SET @I=@I+1
 FETCH NEXT FROM authors_cursor  INTO @cName, @datatype,@xtype
END
CLOSE authors_cursor
DEALLOCATE authors_cursor


PRINT @strSql1
PRINT @strSql2

SET @strMessage=@strSql1+'
'+@strSql2

IF @sqltype=6
BEGIN
 IF @Para<>''
  set @strMessage=@strMessage+' WHERE '+@Para
 EXEC (@strMessage)
END
IF @sqltype=9
BEGIN
SELECT 'TRUNCATE TABLE '+NAME+'
 '+'UPDATE xs_Systemcoding SET maxcode=0 WHERE codingobject='''+NAME+'''' FROM dbo.sysobjects WHERE name like @TableName+'%' AND TYPE='U'
END

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值