declare @sql nvarchar(2000) set @sql='CREATE TABLE [dbo].[users] ( [id] [int] IDENTITY (1, 1) NOT NULL , [username] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL , [password] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ) ' exec sp_executesql @sql
to : yeahnope(金@_) 你这样是建表,而不是用TABLE变量,这样会加大数据库的工作量的,我就是因为不想用临时表才想用TABLE变量的。 TO:icevi(按钮工厂) 能说说UDF 的用法吗?我没用过
楼上说的@@temp是全局的对并发性有问题因为你的@temp是在exec中定义的,而exec相当于嵌套过程 你引用时也必须在exec中如: Set @sql='declare @temp table(id int,name varchar(50),a1 int,b1 int,a3 int ,c4 int ,.......);select * from @temp' -----------------------------^^^^^^^^^^^^^^^^^^^OK了! EXAM(@SQL)
CREATE FUNCTION aaa(@id int) RETURNS TABLE AS RETURN (SELECT * FROM sysobjects where id=@id)使用时用select * from dbo.aaa(object_id('mytable'))就可以。这样不用显示指定表结构。能不能完全动态栏位,有时间我再想想看。
你不用一气喝成 Set @sql='declare @temp table(id int,name varchar(50),a1 int,b1 int,a3 int ,c4 int ,.......);' ...... set @sql=@sql+'select * from @temp'exec(@sql)
有些情况下,可以考虑用UDF返回表变量来做,这样不用预先定义表结构。不过UDF里有些语句不能用,可能有些操作也不好做。
set @sql='CREATE TABLE [dbo].[users] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[username] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[password] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL
) '
exec sp_executesql @sql
你这样是建表,而不是用TABLE变量,这样会加大数据库的工作量的,我就是因为不想用临时表才想用TABLE变量的。
TO:icevi(按钮工厂)
能说说UDF 的用法吗?我没用过
Set @sql='declare @temp table(id int,name varchar(50),a1 int,b1 int,a3 int ,c4 int ,.......);select * from @temp'
-----------------------------^^^^^^^^^^^^^^^^^^^OK了!
EXAM(@SQL)
RETURNS TABLE
AS
RETURN (SELECT *
FROM sysobjects where id=@id)使用时用select * from dbo.aaa(object_id('mytable'))就可以。这样不用显示指定表结构。能不能完全动态栏位,有时间我再想想看。
能不能用ALTER TABEL 来修改TABLE变量呢?就象修改表一样
Set @sql='declare @temp table(id int,name varchar(50),a1 int,b1 int,a3 int ,c4 int ,.......);'
......
set @sql=@sql+'select * from @temp'exec(@sql)
184320条记录