存储过程连接,搞半天了,高手看一下@baseSql如何连接

sdweihailh 2012-12-17 05:29:50
create proc PROK1
@tablename nvarchar(20),
@fieldname nvarchar(20),
@userName nvarchar(20) output
as
DECLARE @TJ VARCHAR(8)
set @TJ=CONVERT(VARCHAR,DATEPART(YYYY,getDATE()))+ CONVERT(VARCHAR,DATEPART(MM,getDATE()))
set @TJ='PU'+@TJ
DECLARE @baseSql Nvarchar(3000)
set @baseSql='select @userName=MAX(SUBSTRING(@fieldname,9,4)) from '+@tablename+'where left(@fieldname,4)='+@TJ
EXEC sp_executesql @baseSql,N'@userName varchar(80) OUTPUT',@userName OUTPUT
print @userName
GO
--调用
declare @userName nvarchar(10)
exec PROK1 LSPORV,@userName output
select @userName
--
...全文
151 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdweihailh 2012-12-18
  • 打赏
  • 举报
回复
ok,谢谢,搞定了
sdweihailh 2012-12-18
  • 打赏
  • 举报
回复
结果为NULL
sdweihailh 2012-12-18
  • 打赏
  • 举报
回复
TO DBA_Huangzj AND qianjin036a 你们执行成功了吗?返回是PU2012120003,我用的SQL2005怎么一直执行不成功!
發糞塗牆 2012-12-17
  • 打赏
  • 举报
回复
改成这样
--create table LSPORV
--(cgdh nvarchar(12))
--INSERT INTO LSPORV
--SELECT 'PU2012120001' UNION
--SELECT 'PU2012120002' UNION
--SELECT 'PU2012120003' 
--GO
ALTER  proc PROK1
@tablename nvarchar(20),
@fieldname nvarchar(20),
@userName nvarchar(20) output
as 
DECLARE @TJ VARCHAR(8)
set @TJ=CONVERT(VARCHAR,DATEPART(YYYY,getDATE()))+ CONVERT(VARCHAR,DATEPART(MM,getDATE()))
set @TJ='PU'+@TJ
DECLARE @baseSql Nvarchar(3000)
set @baseSql='select @userName=MAX(SUBSTRING('+@fieldname+',9,4)) from '+@tablename+' where left('+@fieldname+',4)='''+@TJ+''''
EXEC sp_executesql @baseSql,N'@userName varchar(80) OUTPUT',@userName OUTPUT 
print @userName
GO
--调用
declare @userName nvarchar(10)
exec PROK1 'LSPORV','cgdh',@userName output 
select @userName
go
sdweihailh 2012-12-17
  • 打赏
  • 举报
回复
create table LSPORV (cgdh nvarchar(12)) INSERT INTO LSPORV SELECT 'PU2012120001' UNION SELECT 'PU2012120002' UNION SELECT 'PU2012120003' create proc PROK1 @tablename nvarchar(20), @fieldname nvarchar(20), @userName nvarchar(20) output as DECLARE @TJ VARCHAR(8) set @TJ=CONVERT(VARCHAR,DATEPART(YYYY,getDATE()))+ CONVERT(VARCHAR,DATEPART(MM,getDATE())) set @TJ='PU'+@TJ DECLARE @baseSql Nvarchar(3000) set @baseSql='select @userName=MAX(SUBSTRING('+@fieldname+',9,4)) from '+@tablename+' where left(@fieldname,4)='''+@TJ+'''' EXEC sp_executesql @baseSql,N'@userName varchar(80) OUTPUT',@userName OUTPUT print @userName GO --调用 declare @userName nvarchar(10) exec PROK1 'LSPORV','cgdh',@userName output select @userName go 消息 137,级别 15,状态 2,第 1 行 必须声明标量变量 "@fieldname"。 (1 行受影响)
-晴天 2012-12-17
  • 打赏
  • 举报
回复
create proc PROK1 @tablename nvarchar(20), @fieldname nvarchar(20), @userName nvarchar(20) output as DECLARE @TJ VARCHAR(8) set @TJ=CONVERT(VARCHAR,DATEPART(YYYY,getDATE()))+ CONVERT(VARCHAR,DATEPART(MM,getDATE())) set @TJ='PU'+@TJ DECLARE @baseSql Nvarchar(3000) set @baseSql='select @userName=MAX(SUBSTRING('+@fieldname+',9,4)) from '+@tablename+' where left(@fieldname,4)='''+@TJ+'''' EXEC sp_executesql @baseSql,N'@userName varchar(80) OUTPUT',@userName OUTPUT print @userName GO --调用 declare @userName nvarchar(10) exec PROK1 'LSPORV','columnname',@userName output select @userName go drop procedure prok1
sdweihailh 2012-12-17
  • 打赏
  • 举报
回复
试了变量没有传递进去
-晴天 2012-12-17
  • 打赏
  • 举报
回复
语句有点问题,另外,参数也不对. create proc PROK1 @tablename nvarchar(20), @fieldname nvarchar(20), @userName nvarchar(20) output as DECLARE @TJ VARCHAR(8) set @TJ=CONVERT(VARCHAR,DATEPART(YYYY,getDATE()))+ CONVERT(VARCHAR,DATEPART(MM,getDATE())) set @TJ='PU'+@TJ DECLARE @baseSql Nvarchar(3000) set @baseSql='select @userName=MAX(SUBSTRING(@fieldname,9,4)) from '+@tablename+' where left(@fieldname,4)='''+@TJ+'''' XEC sp_executesql @baseSql,N'@userName varchar(80) OUTPUT',@userName OUTPUT print @userName GO --调用 declare @userName nvarchar(10) exec PROK1 'LSPORV','columnname',@userName output select @userName go drop procedure prok1 把exec PROK1 中的 columnname 改成相应的列名.
sdweihailh 2012-12-17
  • 打赏
  • 举报
回复
select @userName=MAX(SUBSTRING(@fieldname,9,4)) from LSPORV where left(@fieldname,4)=PU201212 消息 137,级别 15,状态 2,第 1 行 必须声明标量变量 "@fieldname"。 (1 行受影响)
發糞塗牆 2012-12-17
  • 打赏
  • 举报
回复
create proc PROK1 @tablename nvarchar(20), @fieldname nvarchar(20), @userName nvarchar(20) output as DECLARE @TJ VARCHAR(8) set @TJ=CONVERT(VARCHAR,DATEPART(YYYY,getDATE()))+ CONVERT(VARCHAR,DATEPART(MM,getDATE())) set @TJ='PU'+@TJ DECLARE @baseSql Nvarchar(3000) set @baseSql='select @userName=MAX(SUBSTRING(@fieldname,9,4)) from '+@tablename+'where left(@fieldname,4)='+@TJ print @basesql 这里就print出来了 EXEC sp_executesql @baseSql,N'@userName varchar(80) OUTPUT',@userName OUTPUT print @userName GO --调用 declare @userName nvarchar(10) exec PROK1 LSPORV,@userName output select @userName --
下载了一大堆的免费文档 我也贡献一个我自己写的PowerDesigner16 5的使用文档 这个是公司领导让我自己写来做使用指导用的 写的仓促 多有不恰当的地方 望大家见谅 1 这个是16 5的版本 2 这个是以oralce11g为模板 3 文档目录如下: PowerDesigner 16 5 指导 1 一 安装 3 二 新建模板步骤 这里以Oracle11g数据库为例 3 1 新建Model 3 2 Modle设置 3 3 模板设置 4 4 右侧工具条 5 5 新建测试包 6 6 表配置 6 6 1进入模板 6 6 2新建表 6 6 3修改表 7 6 4添加注释 7 6 5属性设置 8 6 5 1 8 6 5 2 9 6 5 3 9 6 5 4 9 6 6添加表关系 10 6 7表关系设置 10 6 8模板保存 12 6 9查看模板 12 三 模板导入脚本 12 1 打开Change Current DRMS 12 2 删除多余双引号 13 3 生成脚本 13 四 配置数据库 15 1 点击Database >Configure Connections 15 2 选择第三个系统数据根源 17 3 选择Oracle in OraDb11g hom1 选择下一步 然后点击完成 17 4 数据源配置 18 5 配置成功 19 五 反向工程生成模板 20 1 按照二 1和二 2生成一个空模板 20 2 选择Database >Update Model from Database 20 3 选择数据源 20 4 数据源配置 21 5 选择反向工程导出对象 22 6 可以看到反向工程自动生成的模板 即代表操作工程 23 六 生成HTML文档 24 1 点击Report >Generate Report 24 2 配置完成 点击确认即可 24 3 打开html文档 应该是下图格式 25">下载了一大堆的免费文档 我也贡献一个我自己写的PowerDesigner16 5的使用文档 这个是公司领导让我自己写来做使用指导用的 写的仓促 多有不恰当的地方 望大家见谅 1 这个是16 5的版本 2 这个是以oralce11g为模板 3 文档 [更多]

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧