TSQL - 动态创建表和插入

时间:2015-12-22 20:48:57

标签: sql sql-server tsql sql-server-2008-r2

我在动态创建表并插入表时遇到了一些麻烦。我已尝试过多种方式,无法产生理想的结果。请参阅下文,了解我正在尝试的简化版本。请注意,这只是一次尝试 - 我也尝试了其他尝试(例如INSERT INTO [table] EXEC(@exe))也没有成功。

每次我在下面尝试时,都会收到一条消息

  

命令已成功完成

但是甚至没有创建过表格。

我正在使用SQL Server 2008 R2。

DECLARE @sqlText nvarchar

SET @sqlText = 
N'
IF OBJECT_ID(''[BudgetProcedures].dbo.UnitOccupancy'', ''U'') IS NOT NULL
DROP TABLE [BudgetProcedures].dbo.UnitOccupancy;

CREATE TABLE [BudgetProcedures].dbo.UnitOccupancy (Property varchar(15)
                                                    ,Unit varchar(15)
                                                    ,YearLength varchar(15)
                                                    ,Lease varchar(15));

INSERT INTO [BudgetProcedures].[dbo].[UnitOccupancy] (Property, Unit, YearLength, Lease)

(SELECT ''ExProp''  
,''ExUnit''
,''ExYrlen''
,''ExLease''
)
'

EXEC(@sqlText)

3 个答案:

答案 0 :(得分:5)

您需要声明为:

DECLARE @sqlText nvarchar(1000)

其他方式默认长度为1。并且由于在语句开头有新行,因此不会抛出语法异常(您的查询只包含新的行符号,这是合法的)。删除新行,您将收到错误。

https://msdn.microsoft.com/en-us/library/ms176089.aspx

  

在数据定义或变量声明中未指定n时   声明,默认长度为1。

您可以使用:

print @sqlText

看看你的陈述是什么样的。

答案 1 :(得分:4)

当我改变这个时,我能够成功测试你的脚本:

DECLARE @sqlText nvarchar

对此:

DECLARE @sqlText nvarchar(max)

答案 2 :(得分:0)

您也可以尝试这样做:不使用局部变量然后执行它,您可以使用exec语句直接执行查询,如下所示:

EXEC('IF OBJECT_ID(''[BudgetProcedures] .dbo.UnitOccupancy'',''U'')IS NOT NULL DROP TABLE [BudgetProcedures] .dbo.UnitOccupancy;

CREATE TABLE [BudgetProcedures] .dbo.UnitOccupancy(Property varchar(15)                                                     ,单位varchar(15)                                                     ,YearLength varchar(15)                                                     ,Lease varchar(15));

INSERT INTO [BudgetProcedures]。[dbo]。[UnitOccupancy](Property,Unit,YearLength,Lease) (选择''ExProp'' '' ExUnit '' '' ExYrlen '' '' ExLease '' )')