Sql server 我可以在参数后面创建表和列名吗?
我只想在my函数后面创建一个返回nvarchar数据类型的表和列,我怎么能这样创建呢?请参见下面的代码:Sql server 我可以在参数后面创建表和列名吗?,sql-server,tsql,Sql Server,Tsql,我只想在my函数后面创建一个返回nvarchar数据类型的表和列,我怎么能这样创建呢?请参见下面的代码: IF @mode = 3 CREATE TABLE TMP( TMPID INT, [NAMES] NVARCHAR(50), [dbo.GetMonthNameOfDate(@date)] MONEY, [dbo.GetMonthNameOfDate(DATEADD(M,1,@
IF @mode = 3
CREATE TABLE TMP(
TMPID INT,
[NAMES] NVARCHAR(50),
[dbo.GetMonthNameOfDate(@date)] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,1,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,2,@date))] MONEY
)
ELSE
CREATE TABLE TMP(
TMPID INT,
[dbo.GetMonthNameOfDate(@date)] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,1,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,2,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,3,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,4,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,5,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,6,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,7,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,8,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,9,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,10,@date))] MONEY,
[dbo.GetMonthNameOfDate(DATEADD(M,11,@date))] MONEY
)
GetMonthNameOfDate是一个函数,返回一年中月份的名称。使用动态sql
DECLARE @sql varchar(2000)
IF @mode = 3
set @sql = '
CREATE TABLE TMP(
TMPID INT,
[NAMES] NVARCHAR(50),
[' + dbo.GetMonthNameOfDate(@date) + '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,1,@date))'] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,2,@date))'] MONEY
)'
ELSE
set @sql = '
CREATE TABLE TMP(
TMPID INT,
[' + dbo.GetMonthNameOfDate(@date)+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,1,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,2,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,3,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,4,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,5,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,6,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,7,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,8,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,9,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,10,@date))+ '] MONEY,
[' + dbo.GetMonthNameOfDate(DATEADD(M,11,@date))+ '] MONEY
)'
exec sp_executesql @sql
为什么不使用表变量(假设为SQL Server 2005+)或临时表?除此之外,函数返回的数据类型似乎与列不匹配……我只是为了多用途而创建函数。。