我在动态创建表并插入表时遇到了一些麻烦。我已尝试过多种方式,无法产生理想的结果。请参阅下文,了解我正在尝试的简化版本。请注意,这只是一次尝试 - 我也尝试了其他尝试(例如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)
答案 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 '' )')