存储过程里写了很复杂的SQL语句,通过拼接,动态计算等,最后exec(sql),
执行存储过程会显示拼接后的数据,如何取这个存储过程拼接后的列名呢
PS:sql语句太过复杂,没法一个个取字段把!求大神赐教,最好有类似去表列名的那种方法来取存储过程列名最好!!------------
另求:SQL有没有什么方法能把存储过程返回的语句生成临时表,并且在一个存储过程中还可以调用临时表,并且临时表的列名是动态的,不能先指定列名,应该是通过动态SQL生成的,在exec执行的SQL中可以生成动态临时表,但是出了exec就没法用了,有很多复杂的业务一个exec很难处理完,那出了exec临时表又访问不到了,主要考虑多用户同时操作问题。单用户到好处理,希望大神赐教!!不胜感谢!!
执行存储过程会显示拼接后的数据,如何取这个存储过程拼接后的列名呢
PS:sql语句太过复杂,没法一个个取字段把!求大神赐教,最好有类似去表列名的那种方法来取存储过程列名最好!!------------
另求:SQL有没有什么方法能把存储过程返回的语句生成临时表,并且在一个存储过程中还可以调用临时表,并且临时表的列名是动态的,不能先指定列名,应该是通过动态SQL生成的,在exec执行的SQL中可以生成动态临时表,但是出了exec就没法用了,有很多复杂的业务一个exec很难处理完,那出了exec临时表又访问不到了,主要考虑多用户同时操作问题。单用户到好处理,希望大神赐教!!不胜感谢!!
--测试数据
IF OBJECT_ID('ta','u') IS NOT NULL --测试数据表
DROP TABLE ta
GO
IF OBJECT_ID('pp','p') IS NOT NULL
DROP PROC pp
GO
CREATE TABLE ta (id INT,name VARCHAR(10))
GO
CREATE PROC pp --测试存储过程
AS
SELECT * FROM ta --返回ta表信息
GO
--测试数据结束
SELECT *
INTO tx
FROM OPENROWSET('SQLOLEDB',
'SERVER=localhost;uid=sa;pwd=123456;Database=Test',
'EXEC test.dbo.pp') AS s
SELECT name
FROM syscolumns
WHERE id = OBJECT_ID('tx', 'u')DROP TABLE tx
结果:
执行存储过程会显示拼接后的数据,如何取这个存储过程拼接后的列名呢
PS:sql语句太过复杂,没法一个个取字段把!你用exec执行动态sql,然后会返回1个结果集,你要取这个结果集中有哪些列 对吗
A)按照固有的逻辑决定的——你也按照固有的逻辑去创建临时表啊
B)按照动态的配置决定的——那么在写这个配置的同时,(在其它专用的DB上)建一个永久表,把它当作“临时表”使用(可以加上 @@SPID 来区分不同会话的数据)
用了OPENROWSET再取@@SPID了,值就不对了。不是同一个了
用了OPENROWSET再取@@SPID了,值就不对了。不是同一个了
OPENROWSET里的@@SPID是另一个,和当前会话不一样